python 单元测试中的测试顺序

Order of tests in python unittest

我正在查看类似的问题,但找不到问题的答案。

我在派生自 unittest.TestCase

的 python class 中编写了测试
class TestEffortFormula(unittest.TestCase)

我需要给测试下命令(请不要告诉我我不应该依赖测试的命令,我只是这样做)。

在我需要对测试下命令之前,我用来 运行 测试的命令是:

unittest.main(testRunner=TeamcityTestRunner())

然后我想让订单消失,所以我尝试了以下方法:

loader = unittest.TestLoader()
loader.sortTestMethodsUsing(None)
loader.loadTestsFromTestCase(TestEffortFormula)
suite = loader.suiteClass()

但从这里我不知道如何 运行 测试,特别是 testRunner=TeamcityTestRunner() 和以前一样。

感谢您的帮助

选项 1。

一个解决方案(作为解决方法)是 given here - 建议用编号方法 step1step2 等编写测试,然后通过收集和存储它们dir(self) 并将它们生成一个 test_ 方法,每个方法 try

不理想,但符合您的期望。每个测试序列必须是一个单一的测试Class(或调整那里给出的方法以具有不止一种序列生成方法)。

选项 2。

另一种解决方案,也在链接的问题中,是您将测试命名为按字母顺序+数字顺序,以便它们将按该顺序执行。

但在这两种情况下,都编写整体测试,每个测试都在自己的测试中 Class。

P.S。我同意所有关于不应以这种方式进行单元测试的评论;但在某些情况下,单元测试框架(如 unittestpytest)习惯于进行集成测试,这需要模块化的独立步骤才能发挥作用。还有,如果QA不能影响Dev去写模块化的代码,这些事情就不得不做。

我自己找了很久才解决这个问题。
this question 中的一个答案正是您所需要的。

应用于您的代码:

ln = lambda f: getattr(TestEffortFormula, f).im_func.func_code.co_firstlineno
lncmp = lambda _, a, b: cmp(ln(a), ln(b))
unittest.TestLoader.sortTestMethodsUsing = lncmp

suite = unittest.TestLoader().loadTestsFromTestCase(TestEffortFormula)
unittest.TextTestRunner(failfast=True).run(suite)

不幸的是,设置 unittest.TestLoader.sortTestMethodsUsing=None 不起作用,尽管 documented 这应该避免按字母顺序对测试进行排序。