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.