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 - 建议用编号方法 step1
、step2
等编写测试,然后通过收集和存储它们dir(self)
并将它们生成一个 test_
方法,每个方法 try
。
不理想,但符合您的期望。每个测试序列必须是一个单一的测试Class(或调整那里给出的方法以具有不止一种序列生成方法)。
选项 2。
另一种解决方案,也在链接的问题中,是您将测试命名为按字母顺序+数字顺序,以便它们将按该顺序执行。
但在这两种情况下,都编写整体测试,每个测试都在自己的测试中 Class。
P.S。我同意所有关于不应以这种方式进行单元测试的评论;但在某些情况下,单元测试框架(如 unittest
和 pytest
)习惯于进行集成测试,这需要模块化的独立步骤才能发挥作用。还有,如果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 这应该避免按字母顺序对测试进行排序。
我正在查看类似的问题,但找不到问题的答案。
我在派生自 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 - 建议用编号方法 step1
、step2
等编写测试,然后通过收集和存储它们dir(self)
并将它们生成一个 test_
方法,每个方法 try
。
不理想,但符合您的期望。每个测试序列必须是一个单一的测试Class(或调整那里给出的方法以具有不止一种序列生成方法)。
选项 2。
另一种解决方案,也在链接的问题中,是您将测试命名为按字母顺序+数字顺序,以便它们将按该顺序执行。
但在这两种情况下,都编写整体测试,每个测试都在自己的测试中 Class。
P.S。我同意所有关于不应以这种方式进行单元测试的评论;但在某些情况下,单元测试框架(如 unittest
和 pytest
)习惯于进行集成测试,这需要模块化的独立步骤才能发挥作用。还有,如果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 这应该避免按字母顺序对测试进行排序。