在Python中更改单元测试顺序
我该怎么做才能让Python中的单元测试(使用unittest
)按照文件中指定的顺序运行呢?
8 个回答
9
如上所述,通常情况下,测试用例中的测试应该以任何顺序(也就是随机顺序)进行测试。
不过,如果你确实想要对测试用例中的测试进行排序,这显然不是一件简单的事情。测试(方法名称)是通过使用 dir(MyTest)
从测试用例中获取的,这个命令会返回一个已排序的成员列表。你可以使用一个聪明的(?)小技巧,通过行号来对方法进行排序。这种方法适用于一个测试用例:
if __name__ == "__main__":
loader = unittest.TestLoader()
ln = lambda f: getattr(MyTestCase, f).im_func.func_code.co_firstlineno
lncmp = lambda a, b: cmp(ln(a), ln(b))
loader.sortTestMethodsUsing = lncmp
unittest.main(testLoader=loader, verbosity=2)
25
聪明的命名。
class Test01_Run_Me_First( unittest.TestCase ):
def test010_do_this( self ):
assertTrue( True )
def test020_do_that( self ):
etc.
这是强制特定顺序的一种方法。
29
你可以通过设置一个自定义的比较函数来改变默认的排序方式。在unittest.py文件中,你会找到一个类变量unittest.TestLoader.sortTestMethodsUsing
,默认情况下它是设置为内置函数cmp
的。
比如,你可以通过这样做来改变测试的执行顺序:
import unittest
unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(y, x)