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)