unittest模块提供了一组丰富的工具用于构建和运行测试。本小节演示了一小部分足以满足大多数用户需求的工具。
这里是一个用来测试三种字符串方法的小脚本:
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开头命名的方法。这种命名方式告知了test runner哪些方法代表了测试。
每个测试的关键是调用断言来检查结果。assertEqual()
用来检查结果是否正好与预期相符;assertTrue()
和assertFalse()
用来验证条件真假;assertRaises()
用来验证是否引发了特定异常。使用这些方法来替代assert语句,以便于test runner能够积累所有测试结果并生成报告。
setUp()
和tearDown()
方法允许你定义每个测试方法执行前和执行后的说明。它们在Organizing test code
小节中有更详细的解释。
最后一块显示了一个简单的方法去运行测试。unittest.main()
方法为测试脚本提供了一个命令行界面。当在命令行中运行时,上面的脚本生成一个如下的输出:
![](https://img.haomeiwen.com/i11447854/35f676290196ae40.png)
将
-v
选项传递给测试脚本将指示unittest.main()
启用更高级别的详细程序,并生成下面的输入:![](https://img.haomeiwen.com/i11447854/7684da161de1e875.png)
上面的例子展示了最常用的单元测试功能,足以满足许多日常测试需求。本文档的其余部分探讨了第一原则的完整功能集。
ps:第一原则是啥?first principles
网友评论