首页 > 编程 > Python > 正文

Python单元测试unittest的具体使用示例

2020-02-16 00:11:04
字体:
来源:转载
供稿:网友

Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。

unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。

unittest有四个比较重要的概念是test fixture, test case, test suite, test runner, 。

在说unittest之前,先说几个概念:

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

通过dir(unittest),我们可以看到unittest全部的属性和方法,他们的关系如下图所示。

unittest主要类关系

正常调用unittest的流程是,TestLoader 自动将测试用例TestCase中加载到TestSuite里,TextTestRunner调用TestSuite的run方法,顺序执行里面的TestCase中以test开头的方法,并得到测试结果TestResult。在执行TestCase过程中,先进行SetUp()环境准备,执行测试代码,最后tearDown()进行测试的还原。

其中TestLoader在加载过程中,进行添加的TestCase是没有顺序的。一个TestCase里如果存在多个验证方法的话,会按照方法中test后方首字母的ascii码从小到大排序后执行。

可以通过手动调用TestSuite的addTest、addTests方法来动态添加TestCase,这样既可以确定添加用例的执行顺序,也可避免TestCase中的验证方法一定要用test开头。

下面写一个简单的单元测试用例

import unittestclass MyTest(unittest.TestCase): # 继承unittest.TestCase  def tearDown(self):    # 每个测试用例执行之后做操作    print('111')  def setUp(self):    # 每个测试用例执行之前做操作    print('22222')  @classmethod  def tearDownClass(self):  # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次     print('4444444')  @classmethod  def setUpClass(self):  # 必须使用@classmethod 装饰器,所有test运行前运行一次    print('33333')  def test_a_run(self):    self.assertEqual(1, 1) # 测试用例      def test_b_run(self):    self.assertEqual(2, 2) # 测试用例    if __name__ == '__main__':  unittest.main()#运行所有的测试用例

下面是一些常用的断言,也就是校验结果

    assertEqual(a, b)   a == b       assertNotEqual(a, b)   a != b       assertTrue(x)   bool(x) is True       assertFalse(x)   bool(x) is False       assertIsNone(x)   x is None       assertIsNotNone(x)   x is not None      assertIn(a, b)   a in b      assertNotIn(a, b)   a not in b            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表