改变Python中unit testing的顺序
我怎么能做到这一点,所以Python的unit testing(使用unittest
)按文件中指定的顺序运行?
您可以通过设置自定义比较function来更改默认sorting行为。 在unittest.py中可以find默认情况下设置为内置函数cmp
的类variablesunittest.TestLoader.sortTestMethodsUsing
。
例如,您可以通过执行以下操作来恢复testing的执行顺序:
import unittest unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(y, x)
聪明的命名。
class Test01_Run_Me_First( unittest.TestCase ): def test010_do_this( self ): assertTrue( True ) def test020_do_that( self ): etc.
是强制执行特定命令的一种方法。
如上所述,通常在testing用例中的testing应该以任何(即随机)顺序进行testing。
但是,如果你想在testing用例中排列testing,显然这不是微不足道的。 使用dir(MyTest)
从testing用例中检索testing(方法名称),它返回一个sorting的成员列表。 您可以使用巧妙的(?)hack来按行号sorting方法。 这将适用于一个testing用例:
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)
也有testing运动员自己做 – 我认为py.test做到了。
正如我前面提到的那样,使用长鼻库(请参阅这里的简短说明)。
我使用这里提供的PyTestsorting插件find了一个解决scheme。
在CLI中尝试py.test YourModuleName.py -vv
,testing将按照它们出现在模块中的顺序运行。
我做了同样的事情,对我来说工作得很好。
注意:您需要安装PyTest软件包并导入它。