第十一章 测试代码
目的:学习如何使用Python模块unittest 中的工具来测试代码
- 单元测试和测试用例:
单元测试 用于核实函数的某个方面没有问题;测试用例 是一组单元测试, 这些单元测试一起核实函数在各种情形下的行为都符合要求。
- 测试函数
步骤:导入unittest模块→再创建一个继承unit.TestCase的类→编写一系列方法对不同的方面进行测试→利用断言方 法(assertEqual)用来核实得到的结果是否与期望的结果一致→unittest.main() 让Python运行这个文件中的测试
- 测试成功时:
01 import unittest 02 from name_function import get_formatted_name; 03 class NamesTestCase(unittest.TestCase): 04 """测试Name_function.py""" 05 06 def test_first_last_name(self): 07 """能够正确处理Janis Joplin这样的姓名吗""" 08 formatted_name=get_formatted_name('janis','joplin'); 09 self.assertEqual(formatted_name,'Janis Joplin'); 10 11 12 13 unittest.main() >>> . ---------------------------------------------------------------------- Ran 1 test in 0.007s
OK |
第1行的句点表明有一个测试通过了。 接下来的一行指出Python运行了一个测试, 消耗的时间不到0.007秒。 最后的OK 表明该测试用例中的所有单元测试都通过了
- 测试失败时:
F ====================================================================== FAIL: test_first_last_name (__main__.NamesTestCase) 能够正确处理Janis Joplin这样的姓名吗 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:/Users/Franz/Desktop/prac.pth/test_name_function.py", line 9, in test_first_last_name self.assertEqual(formatted_name,'Janis Joplin'); AssertionError: None != 'Janis Joplin'
---------------------------------------------------------------------- Ran 1 test in 0.042s
FAILED (failures=1) |
- 测试类
各种断言方法
测试语句与测试函数类似,可以用 unittest.TestCase 类包含的方法setUp(),使得只需创建这些对象一次, 并在每个测试方法中使用它们。
01 import unittest; 02 from survey import AnonymousSurvey; 03 04 class TestAnonymouseSurvey(unittest.TestCase): 05 """针对AnonyouseSurvey类的测试""" 06 07 def setUp(self): 08 """ 09 创建一个调查对象和一组答案,供测试方法使用 10 """ 11 question="What language did you first learn to speak?"; 12 self.my_survey=AnonymousSurvey(question); 13 self.responses=['English','Spanish','Mandarin']; 14 15 def test_store_single_response(self): 16 """测试单个答案是否能被妥善的存储""" 17 self.my_survey.store_response('English'); 18 self.assertIn('English',self.my_survey.responses); 19 20 def test_store_three_responses(self): 21 """测试三个函数会被妥善的保存吗""" 22 for response in self.responses: 23 self.my_survey.store_response(response); 24 for response in self.responses: 25 self.assertIn(response,self.my_survey.responses); 26 27 unittest.main() >>> .. ---------------------------------------------------------------------- Ran 2 tests in 0.050s
OK |