一、摘要
本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到
如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何?
如果有些方法未在unittest框架下编写,又想使用unittest框架执行,该当如何?
如果想自定义一个执行顺序该当如何?
二、代码实例
如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何?
执行结果会是:
三、代码解析
unittest为我们提供了多种跳过测试用例的方法,当我们的大量用例在不同场景下可能有些用例并不想执行,例如回归测试、例如新部署的一套环境需要对主功能进行验证、例如有些用例需要具备条件才执行等等场景我们便需要这些跳过用例的方法,当然我们可以将那些不想执行的用例注释掉,但也可以采用如下装饰器给测试方法加上注解
@unittest.skip(reason) # 无条件跳过,reason是用来描述为什么跳过它
@unittest.skipIf(condition,reason) # 有条件跳过,当condition满足的情况下便跳过此装饰器装饰的用例
@unittest.skipUnless(condition,reason) # 有条件跳过,当condition满足的情况下便要执行此装饰器装饰的用例,与上一个相反
@unittest.expectedFailure # 用于标记期望执行失败的测试方法,如果该测试方法执行失败,则被认为成功,如果执行成功,则被认为失败
并且当测试模块被装饰器装饰为跳过时,它的setUpModule()和tearDownModule()也就不会执行了
同样的当测试类被装饰器装饰为跳过时,它的setUpClass()和tearDownClass()也就不会执行了
一样的当测试方法被装饰器装饰为跳过时,它的setUp()和tearDown()也就不会执行了
如果想自定义一个执行顺序该当如何?
在前边的文章中介绍了多种执行用例的方式,首先unittest.main()这种方式启动单元测试去执行,各测试方法的执行顺序是按所有方法名的字符串的ASCII码排序后的顺序执行的
如果想自定义顺序执行,我们需要使用TestSuite(), 它的执行顺序是按照我们addTest()的次序进行执行的
如果有些方法未在unittest框架下编写,又想使用unittest框架执行,该当如何?
当我们的一些老代码并没建立在unittest的体系中,但是如果想使用unittest去执行它,又不想将所有老代码转换到unittest的时候,unittest为我们提供了unittest.FunctionTestCase(testFunc,setUp=None,tearDown=None,description=None)
假设我们有个测试方法如下
它并没有建立在unittest框架中,只是一个独立的函数,那么我们可以创建等价的测试用例
然而并不建议使用这种方法,如果大量的这种代码出现,将使得测试代码比较混乱难以维护,和重构
网友评论