Python unittest.TestCase执行顺序


问题内容

Python中是否有一种方法unittest可以设置测试用例的运行顺序?

在我当前的TestCase课程中,一些测试用例具有一些副作用,这些条件为其他测试用例的正常运行设置了条件。现在,我意识到执行此操作的正确方法是使用它setUp()来完成所有设置后的工作,但是我想实现一个设计,在该设计中,每个后续测试都将建立更多的状态,供下一个使用。我觉得这更优雅。

class MyTest(TestCase):
  def test_setup(self):
   #do something
  def test_thing(self)
   #do something that depends on test_setup()

理想情况下,我希望测试按照它们在类中出现的顺序运行。看来它们按字母顺序运行。


问题答案:

不要让它们成为独立的测试-如果您要进行整体测试,请编写整体测试。

class Monolithic(TestCase):
  def step1(self):
      ...

  def step2(self):
      ...

  def _steps(self):
    for name in dir(self): # dir() result is implicitly sorted
      if name.startswith("step"):
        yield name, getattr(self, name)

  def test_steps(self):
    for name, step in self._steps():
      try:
        step()
      except Exception as e:
        self.fail("{} failed ({}: {})".format(step, type(e), e))

如果测试稍后开始失败,并且您想要所有失败步骤的信息,而不是在失败的第一步停止测试案例,则可以使用以下subtests功能:https :
//docs.python.org/3/library/unittest.html#区分测试重复使用子测试

(子测试功能可unittest2用于Python
3.4之前的版本:https :
//pypi.python.org/pypi/unittest2)