Python学习笔记(6)测试
2017-07-22 10:52
363 查看
Chapter 11
测试代码
使用Python标准库中模块unittest提供的测试工具。
#name.py def get_full_name(first, last, middle=''): """获取全名""" if middle == '': full_name = first.title() + ' ' + last.title() else: full_name = first.title() + ' ' + middle.title() + ' ' +last.title() return full_name
#test.py import unittest from name import get_full_name class NameTestCase(unittest.TestCase): """测试name.py""" def test_first_last_name(self): full_name = get_full_name('ming', 'xing') self.assertEqual(full_name, 'Ming Xing') def test_first_last_middle_name(self): full_name = get_full_name('ming', 'xing', 'xiao') self.assertEqual(full_name, 'Ming Xiao Xing') unittest.main()
注意:
1.
NameTestCase是继承
unittest.TestCase的。
2.
test_first_last_name是一个
单元测试,许多
单元测试组成
测试用例。单元测试的名称,
必须以
test_开头,这样Python才能自动运行它们。另外,单元测试的名称是描述性的,必须高度概括测试内容,方便后续Debug。
3.
self.assertEqual(full_name, 'Ming Xing')这是
unittest中的一个
断言方法,断言方法用来判断结果与我们的预期是否一致。断言方法只能在继承
unittest.TestCare中的类中使用。
下面介绍
六种常见的断言方法
assertEqual(a, b)核实
a == b
assertNotEqual(a, b)核实
a != b
assertTrue(x)核实
x == True
assertFalse(x)核实
x == False
assertIn(Item,List)核实
Item in List
assertNotIn(Item,List)核实
Item not in List
4. 如果程序正常运行,输出是这样的
.. ---------------------------------------------------------------------- Ran 2 tests in 0.000s
注意:
如果
test_first_last_middle_name发生错误,另一个正确,输出是这样的
E. ====================================================================== ERROR: test_first_last_middle_name (__main__.NameTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/xxx/Desktop/CODE/test.py", line 10, in test_first_last_middle_name full_name = get_full_name('ming', 'xing', 'xiao') File "/Users/xxx/Desktop/CODE/name.py", line 6, in get_full_name full_name = first.title() + ' ' + middle.title() + ' ' +last.title TypeError: must be str, not builtin_function_or_method --------------------------- 4000 ------------------------------------------- Ran 2 tests in 0.000s FAILED (errors=1)
关于上面两个输出结果:
E表示一个单元测试引发错误,
F表示一个单元测试导致断言失败,
.表示一个单元测试通过。
unittest.main()让Python运行这个文件中的测试。
测试类
与上面的测试函数类似。只不过,在每一个单元测试中,我们都先要对类实例化,并设置其属性。为了减少工作量,可以在单元测试之前使用
setUP(),这样,我们只需创建一次实例,就可以在每个测试方法中使用它们。
#此处省略AnonymousSurvey类 import unittest from survey import AnonymousSurvey class TestAnonymousSurvey(unittest.TestCase): """ 对AnonymousSurvey类的测试""" def setUp(self): question = "What language did you first learn to speak?" self.my_survey = AnonymousSurvey(question) self.responses = ['English', 'Spanish', 'Mandarin'] def test_store_single_response(self): self.my_survey.store_response(self.responses[0]) self.assertIn(self.responses[0], self.my_survey.responses) def test_store_three_responses(self): for response in self.responses: self.my_survey.store_response(response) for response in self.responses: self.assertIn(response, self.my_survey.responses) unittest.main()
注意:
不建议在
for循环中修改列表!
如果需要类似的情形,可以再建一个空列表,把新元素根据需要
append()进去。如果要删除列表元素,可以这样:
for star in stars.sprites().copy(): stars.remove(star)
还有,下面的程序只有暂时效果,是
修改不了列表的!
list = ['ni', 'hao', 'liang', 'cong'] for item in list: item = 'hi' #实际上并不能修改!只有list[x] = y才能修改!
相关文章推荐
- Selenium2 Python 自动化测试实战学习笔记(九)
- Selenium2 Python 自动化测试实战学习笔记(八)
- python学习笔记(八) - 错误、调试、测试
- Selenium2 Python 自动化测试实战学习笔记(二)
- <Test-Driven Development with Python>学习笔记 第一部分 测试驱动开发基础
- python学习笔记—— 用的测试文件
- Selenium2 Python 自动化测试实战学习笔记(五)
- Selenium2 Python 自动化测试实战学习笔记(七)
- Selenium2 Python 自动化测试实战学习笔记(三)
- Python学习笔记-02-循环测试条件中易犯错的要点及配套解决方案
- Python学习笔记&接口测试总结
- Selenium2 Python 自动化测试实战学习笔记(四)
- Selenium2 Python 自动化测试实战学习笔记(九)
- Selenium2 Python 自动化测试实战学习笔记(六)
- python cookbook 学习笔记 -- 1.3 测试一个对象是否是类字符串
- Selenium2 Python 自动化测试实战学习笔记(四)
- Selenium2 Python 自动化测试实战学习笔记(二)
- Selenium2 Python 自动化测试实战学习笔记(五)
- Python学习笔记整理(十)Python的if测试
- Selenium2 Python 自动化测试实战学习笔记(三)