5.4 代码异味 事不过三 三则重构

检查我们的功能测试代码 中 的代码异味 “检查清单表格中新添加的代码事项用了三个一样 的代码块”
编程中有个原则: 叫做不要自我重复 (事不过三,三则重构)

**#coding=utf-8
from selenium import webdriver
import unittest
from selenium.webdriver.common.keys import Keys
import time
class NewVisitorTest(unittest.TestCase):
    def  setUp(self):
        self.browser = webdriver.Firefox()
    def tearDown(self):
        self.browser.quit()
    def test_can_start_a_list_and_retrieve_it_later(self):
#小花听说有一个待办事项的网站很好
#她去看了这个应用的首页
        self.browser.get("http://localhost:8000")
#她注意到这个首页的标题和头部包含“To-Do”
        self.assertIn("To-Do",self.browser.title)
        header_text = self.browser.find_element_by_tag_name('h1').text
        self.assertIn('To-Do',header_text)
#应用邀请她输入一个待办事项
        inputbox = self.browser.find_element_by_id('id_new_item')
        self.assertEqual(
            inputbox.get_attribute("placeholder"),
            'Enter a to-do item'
        )
#她在文本框输入了"Buy  woolen yarn " (购买毛线)
#她的爱好是织毛衣
        inputbox.send_keys("Buy woolen yarn")
#按回车键页面更新了
        inputbox.send_keys(Keys.ENTER)
        time.sleep(1)
# 待办事项中显示“1:Buy woolen yarn”
        table = self.browser.find_element_by_id('id_list_table')
        rows  = table.find_elements_by_tag_name('tr')
        self.assertIn(
          "1:Buy woolen yarn",[row.text for row in rows])
#页面中又显示了一个文本框,可以输入其他待办事项
#她输入了"Knit a sweater with wool”(使用毛线织毛衣)
        inputbox = self.browser.find_element_by_id('id_new_item')
        inputbox.send_keys("Knit a sweater with wool")
        inputbox.send_keys(Keys.ENTER)
        time.sleep(1)
#页面再次跟新,他的清单中显示了这两个待办事项
# 待办事项中显示  1:Buy woolen yarn
#                 2:Knit a sweater with wool
        table = self.browser.find_element_by_id('id_list_table')
        rows  = table.find_elements_by_tag_name('tr')
        self.assertIn(
          "1:Buy woolen yarn",[row.text for row in rows])
        self.assertIn(
          "2:Knit a sweater with wool",[row.text for row in rows])
        self.fail("Finish the test")
#[..]
if __name__=='__main__':
      unittest.main()**

修改重构代码

#coding=utf-8

from selenium import webdriver
import unittest
from selenium.webdriver.common.keys import Keys
import time
class NewVisitorTest(unittest.TestCase):

    def  setUp(self):
        self.browser = webdriver.Firefox()
    def tearDown(self):
        self.browser.quit()
    def check_for_row_in_list_table(self,row_text):
        table = self.browser.find_element_by_id("id_list_table")
        rows = table.find_elements_by_tag_name('tr')
        self.assertIn(
            row_text ,[row.text for row in rows]
        )
    def test_can_start_a_list_and_retrieve_it_later(self):
#小花听说有一个待办事项的网站很好
#她去看了这个应用的首页
        self.browser.get("http://localhost:8000")
#她注意到这个首页的标题和头部包含“To-Do”
        self.assertIn("To-Do",self.browser.title)
        header_text = self.browser.find_element_by_tag_name('h1').text
        self.assertIn('To-Do',header_text)
#应用邀请她输入一个待办事项
        inputbox = self.browser.find_element_by_id('id_new_item')
        self.assertEqual(
            inputbox.get_attribute("placeholder"),
            'Enter a to-do item'
        )
#她在文本框输入了"Buy  woolen yarn " (购买毛线)
#她的爱好是织毛衣
        inputbox.send_keys("Buy woolen yarn")

#按回车键页面更新了
        inputbox.send_keys(Keys.ENTER)
        time.sleep(1)
# 待办事项中显示“1:Buy woolen yarn”
        self.check_for_row_in_list_table( "1:Buy woolen yarn")
#页面中又显示了一个文本框,可以输入其他待办事项
#她输入了"Knit a sweater with wool”(使用毛线织毛衣)
        inputbox = self.browser.find_element_by_id('id_new_item')
        inputbox.send_keys("Knit a sweater with wool")
        inputbox.send_keys(Keys.ENTER)
        time.sleep(1)
#页面再次跟新,他的清单中显示了这两个待办事项
# 待办事项中显示  1:Buy woolen yarn
#                              2:Knit a sweater with wool
        self.check_for_row_in_list_table( "1:Buy woolen yarn")
        self.check_for_row_in_list_table( "2:Knit a sweater with wool")
        self.fail("Finish the test")
#[..]
if __name__=='__main__':
      unittest.main()

运行结果显示:
跟没有重构时原来一样的结果,我们的重构成功
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43147867/article/details/86544724
5.4