美文网首页
单元测试 Unittest

单元测试 Unittest

作者: SingleDiego | 来源:发表于2018-11-16 11:10 被阅读14次

文档:https://docs.python.org/3/library/unittest.html




基本概念

  • test fixture
    一个 test fixture 代表执行一个或者多个测试时需要准备环境,以及相关联的清理环境的工作。这包含很多内容,比如创建临时的数据库、目录等。

  • test case
    一个 test case 就是测试用例,测试当中的最小单元。unittest 提供一个基本的类 TestCase,用来创建一个 test case

  • test suite
    test suite 是一组 test case 或者 test suite 的集合,也可以两者都有。用来将需要一同执行的测试用例聚合到一起。

  • test runner
    一个 test runner 是用来执行测试用例的,对测试进行编排并把结果返回给用户。




简单例子

编写单元测试时,我们需要编写一个测试类,从 unittest.TestCase 继承。

test 开头的方法就是测试方法,不以 test 开头的方法不被认为是测试方法,测试的时候不会被执行。

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        # 检查 'foo'.upper() 和 'FOO' 是否相等
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        # 检查 'FOO'.isupper() 是否为 True
        self.assertTrue('FOO'.isupper())
        # 检查 'Foo'.isupper() 是否为 Flase
        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
        # 捕捉 TypeError 错误
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()

我们把代码保存为 test.py 文件,现在这样运行它:

$ python test.py

运行结果:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

另一种更常见的方法是在命令行通过参数 -m unittest 直接运行单元测试:

$ python -m unittest test

这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试。

加上参数 -v 可以看到更详细的输出:

$ python -m unittest test -v
test_isupper (test.TestStringMethods) ... ok
test_split (test.TestStringMethods) ... ok
test_upper (test.TestStringMethods) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK




setUp 与 tearDown

可以在单元测试中编写两个特殊的 setUp()tearDown() 方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

setUp()tearDown() 方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在 setUp() 方法中连接数据库,在 tearDown() 方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码。

class TestDict(unittest.TestCase):

    def setUp(self):
        print('setUp...')

    def tearDown(self):
        print('tearDown...')

相关文章

网友评论

      本文标题:单元测试 Unittest

      本文链接:https://www.haomeiwen.com/subject/btmpfqtx.html