用python_unittest做单元测试

如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生。

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

1.比如对取绝对值函数abs(),我们可以编写出以下几个测试用例:

2.输入正数,比如11.20.99,期待返回值与输入相同;

3.输入负数,比如-1-1.2-0.99,期待返回值与输入相反;

4.输入0,期待返回0

5.输入非数值类型,比如None[]{},期待抛出TypeError

把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。

  • 整体结构:unittest库提供了test cases, test suites, test fixturestest runner
  • test case :通过继承TestCase类,我们可以创建一个test,或者一组tests
  • test suites : 测试套件
  • test fixtures : setup + test case + teardown结构
  • 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()