如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生。
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
1.比如对取绝对值函数abs(),我们可以编写出以下几个测试用例:
2.输入正数,比如1、1.2、0.99,期待返回值与输入相同;
3.输入负数,比如-1、-1.2、-0.99,期待返回值与输入相反;
4.输入0,期待返回0;
5.输入非数值类型,比如None、[]、{},期待抛出TypeError。
把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。
unittest库提供了test cases, test suites, test fixtures,test runner:
In [ ]:
import unittest
class TestStringMethods(unittest.TestCase):
def setUp(self): # 在测试之前运行,比如链接数据库等代码可以放在这里
self.s = 'setUp(self)'
def tearDown(self): # 在测试之后运行,比如清理的代码可以在这里
self.s = ''
def test_upper(self): # 正常测试代码
self.assertEqual('foo'.upper(), 'FOO')
@unittest.skip("demonstrating skipping") # 这个测试会被跳过
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()