测试类:必须继承unittest.TestCase(),测试方法必须以test_开头,共享setUp()和tearDown()。
-
setUp()可对所有测试方法进行初始化设置或是设置重复的代码,在每个测试方法之前执行,这个方法引发的异常会被认为是错误,而非测试失败,默认实现是不做任何事;
-
tearDown()用于在测试后进行清理收尾操作。只要setUp()成功运行,无论测试方法是否通过,就一定会执行tearDown(),这个方法引发的异常会被认为是错误,而非测试失败。默认实现是不做任何事。
在测试方法中,unintest单元测试框架提供了一整套内置的断言方法,可使用assert*()系列来判定测试结果。
基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
比较断言
unittest框架提供的第二种断言类型就是比较断言。
下面我们看下各种比较断言:
assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
assertNotAlmostEqual (first, second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7
注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta
assertGreater (first, second, msg = None)
验证first > second,否则fail
assertGreaterEqual (first, second, msg = None)
验证first ≥ second,否则fail
assertLess (first, second, msg = None)
验证first < second,否则fail
assertLessEqual (first, second, msg = None)
验证first ≤ second,否则fail
assertRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
assertNotRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
unittest框架提供的第三种断言类型,可以处理元组、列表、字典等更复杂的数据类型
还可以使用以下方法检查异常、警告和日志消息的生成:
assertRaises(exception, callable, *args, **kwds)/ assertRaises(exception, msg=None)
如果异常被引发,测试通过;如果另一个异常被引发,则测试为错误;如果没有异常被引发,则测试失败。
assertRaisesRegex(exception, regex, callable, *args, **kwds) /assertRaisesRegex(exception, regex, msg=None)
与assertRaises()类似,但也测试regex匹配抛出异常的字符串表示形式。regex可以是正则表达式对象,也可以是包含适合re.search()使用的正则表达式的字符串。
assertWarns(warning, callable, *args, **kwds) assertWarns(warning, msg=None)
如果警告被引发,测试通过;任何异常都是错误,如果没有警告被引发,则测试失败。
assertWarnsRegex(warning, regex, callable, *args, **kwds) assertWarnsRegex(warning, regex, msg=None)
与assertWarns()类似,但也测试regex是否匹配触发的警告的消息。regex可以是正则表达式对象,也可以是包含适合re.search()使用的正则表达式的字符串。
assertLogs(logger=None, level=None)
用于测试至少一条消息记录具有给定级别在记录器或其子节点上。
根据所测的特性测试用例被组合在一起,通过调用unittest.main(),unittest测试框架会自动收集所有模块的测试用例然后执行。
Eg:
import unittest
class StrTestCase(unittest.TestCase):
def setUp(self):
print("StrsetUp()")
def test_up(self):
print("test_up")
def tearDown(self):
print("Str tearDown()")
class FuncTestCase(unittest.TestCase):
def setUp(self):
print("FuncTestCase setUp()")
def test_func(self):
print("test_func")
def tearDown(self):
print("FuncTestCase tearDown()")
if __name__ == '__main__':
unittest.main()
如果想自己构建用例集,eg如下
import unittest
class StrTestCase(unittest.TestCase):
def setUp(self):
print("StrsetUp()")
def test_up(self):
print("test_up")
def tearDown(self):
print("Str tearDown()")
class FuncTestCase(unittest.TestCase):
def setUp(self):
print("FuncTestCase setUp()")
def test_func(self):
print("test_func")
def tearDown(self):
print("FuncTestCase tearDown()")
def suite():
suite = unittest.TestSuite()
suite.addTest(FuncTestCase('test_func'))
return suite
if __name__ == '__main__':
runner=unittest.TextTestRunner()
runner.run(suite())
python unittest的API:https://docs.python.org/2.7/library/unittest.html