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()方法,以便在最后执行(对所有测试都不一样)