改变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软件包并导入它。