import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
创建了一个继承于unittest.Testcase的测试用例。三个单独的测试,每个用以“test”打头的方法命名。这个命名规定告知测试运行器哪些方法代表需要测试。
测试的关键是assertEqual(),这个方法用于检查是否返回预期的结果。assertTrue()或者assertFalse()都用于验证条件。或者使用assertRaises()用于验证是否产生预期的异常。使用这些方法替代assert语句,因此测试运行器可以累积所有的测试结果并生成报告。
setUp(),tearDown()方法运行你定义在测试前或者测试后执行的操作。这两个方法将会在之后的章节详细介绍。...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
除了unittest.main()之外,外有其他一些方法可以用更精细的控制级别运行测试,更简洁的输出,并且不需要从命令行运行。例如,最后两句可以替换成:
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)
运行修改后的脚本会产生以下输出:
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
以上示例显示了最常用的单元测试功能,足以满足许多日常测试需求。该文档的其余部分是从这些最基本的原则中探索完整的功能集。
感觉看完这一章还是感受颇深,平时用的时候只在百度上随便看了两篇文章,了解的都太泛泛了,还是需要自己看文档才学的踏实。
TextTestRunner中的verbosity属性,其实是用在TextTestResult这个类中是返回结果的详尽程度。
如果这个值为1,则形如下例输出:
..F
======================================================================
FAIL: test_upper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/test04.py", line 6, in test_upper
self.assertEqual('foo'.upper(), 'FO')
AssertionError: 'FOO' != 'FO'
----------------------------------------------------------------------
Ran 3 tests in 0.001s
FAILED (failures=1)
如果这个值大于2,则形如下例输出:
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... FAIL
======================================================================
FAIL: test_upper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/test04.py", line 6, in test_upper
self.assertEqual('foo'.upper(), 'FO')
AssertionError: 'FOO' != 'FO'
----------------------------------------------------------------------
Ran 3 tests in 0.001s
FAILED (failures=1)