Python 在unittest assertation失败时执行系统状态重置
关于Python 在unittest assertation失败时执行系统状态重置,python,unit-testing,integration-testing,python-unittest,Python,Unit Testing,Integration Testing,Python Unittest,关于单元测试,我有点困惑。我有一个嵌入式系统,我正在用Python从外部进行测试 问题是,每次测试通过后,我需要重置系统状态。但是,如果测试失败,可能会使系统处于任意状态,我需要重置。在每次测试之后,我返回初始状态,但如果断言失败,它将跳过该部分 因此,如何正确处理这种情况?我的一些想法是: 将每个测试放在一个try,catch,finally中,但这似乎不太正确(unittest已经处理了测试异常) 将每个测试放在不同的类中,并在测试结束时调用tearDown()方法 在每个测试开始时调用i
单元测试
,我有点困惑。我有一个嵌入式系统,我正在用Python从外部进行测试
问题是,每次测试通过后,我需要重置系统状态。但是,如果测试失败,可能会使系统处于任意状态,我需要重置。在每次测试之后,我返回初始状态,但如果断言失败,它将跳过该部分
因此,如何正确处理这种情况?我的一些想法是:
- 将每个测试放在一个
,try
,catch
中,但这似乎不太正确(finally
已经处理了测试异常)unittest
- 将每个测试放在不同的类中,并在测试结束时调用
方法tearDown()
- 在每个测试开始时调用
,返回初始状态(但这比只重置测试结束时需要重置的内容要慢)initSystemState()
有什么建议吗?理想情况下,如果我有
testSpeed()
test,那么应该在末尾调用testSpeedOnStop()
函数。也许unittest
不是这项工作的合适工具,因为所有函数都有副作用,并且在一起工作,所以也许我应该更倾向于我没有研究过的集成测试库。设置状态是在测试类的设置(self)
方法中完成的
此方法在每次测试前自动调用,并为每个测试实例提供新状态
每次测试后,运行tearDown
方法,可能会清除失败测试的残余
您可以编写一个
设置/tearDowm
,在所有测试之前和之后执行;更复杂的测试可能需要生成存根或模拟对象。在这种特殊情况下,一般设置()即使它的性能比只重置正确的东西稍微慢一点,但据我所知,如果每个测试需要不同的清理过程,那么我应该在不同的类中使用它们吗?我恐怕不知道你说的“我应该在不同的类中使用它们吗?”如果我将每个测试放在自己的类中,那么我可以为每个测试编写一个特殊的tearDown()方法,以便在最后执行(对所有测试都不一样)