在Python中改变单元测试的顺序

32 python unit-testing

我怎样才能使Python(使用unittest)中的单元测试按照文件中指定的顺序运行?

ato*_*ter 27

您可以通过设置自定义比较功能来更改默认排序行为.在unittest.py中,您可以找到默认unittest.TestLoader.sortTestMethodsUsing设置为内置函数的类变量cmp.

例如,您可以通过执行以下操作恢复测试的执行顺序:

import unittest
unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(y, x)
Run Code Online (Sandbox Code Playgroud)

  • 这不符合上述问题 (9认同)
  • 这个*确实*回答了上面的问题 (2认同)

S.L*_*ott 16

聪明的命名.

class Test01_Run_Me_First( unittest.TestCase ):
    def test010_do_this( self ):
        assertTrue( True )
    def test020_do_that( self ):
        etc.
Run Code Online (Sandbox Code Playgroud)

是强制特定订单的一种方法.

  • 稍微更聪明的名字是Test010_Run_Me_First,所以如果你决定在两个之间推一个新的,你可以. (2认同)
  • 确实,聪明:)。 (2认同)

Udi*_*Udi 6

如上所述,通常在测试用例中的测试应该以任何(即随机)顺序进行测试.

但是,如果您确实想在测试用例中订购测试,显然这并非易事.使用测试用例检索测试(方法名称)dir(MyTest),返回已排序的成员列表.您可以使用聪明的(?)hack按行号来命令方法.这适用于一个测试用例:

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)
Run Code Online (Sandbox Code Playgroud)

  • 不错的技巧,但您的代码中有错误。它应该是``lncomp = lambda _, a, b: cmp(ln(a), ln(b))`` (2认同)