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

我在从unittest.TestCase派生的python类中编写了Tests

class TestEffortFormula(unittest.TestCase)

我需要给一个为了测试(请不要告诉我,我不应该依赖测试的顺序,我只是做)。

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

unittest.main(testRunner=TeamcityTestRunner())

然后我想使订单消失,所以我尝试了以下操作:

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

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

感谢你的帮助

===============>>#1 票数:5 已采纳

选项1。

在此给出了一种解决方案(作为一种解决方法)-建议使用编号为step1step2等的方法编写测试,然后通过dir(self)收集和存储测试,并将其提供给一个test_方法,每个try s。

不理想,但您期望的结果。 每个测试序列必须是单个TestClass(或使那里给出的方法适用于具有多个序列生成方法)。

选项2。

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

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

PS:我同意所有的意见,即不应以这种方式进行单元测试。 但是在某些情况下,单元测试框架(例如unittestpytest )习惯于进行集成测试,这需要模块化的独立步骤才有用。 另外,如果质量检查不能影响Dev编写模块化代码,则必须完成这些事情。

===============>>#2 票数:2

我已经搜寻了很长时间来自己解决这个问题。
该问题的答案之一正是您需要的。

应用于您的代码:

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不起作用,尽管有文献证明这应该避免按字母顺序对测试进行排序。

  ask by slashms translate from so

未解决问题?本站智能推荐: