Python unittest.TestCase execution order

python, unit-testing

Solution

Don't make them independent tests - if you want a monolithic test, write a monolithic test.

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))

If the test later starts failing and you want information on all failing steps instead of halting the test case at the first failed step, you can use the `subtests` feature: https://docs.python.org/3/library/unittest.html#distinguishing-test-iterations-using-subtests

(The subtest feature is available via `unittest2` for versions prior to Python 3.4: https://pypi.python.org/pypi/unittest2 )

Problem

Is there a way in Python `unittest` to set the order in which test cases are run? In my current `TestCase` class, some testcases have side effects that set conditions for the others to run properly. Now I realize the proper way to do this is to use `setUp()` to do all setup related things, but I would like to implement a design where each successive test builds slightly more state that the next can use. I find this much more elegant. ``` class MyTest(TestCase): def test_setup(self): # Do something def test_thing(self): # Do something that depends on test_setup() ``` Ideally, I would like the tests to be run in the order they appear in the class. It appears that they run in alphabetical order.

Original source

Related problems