在 unittest tearDown 方法中断言是否可以?

Is it OK to assert in unittest tearDown method?

我有一个包含多个测试的 TestCase,需要在每个测试结束时断言几个条件(每个测试都相同)。将这些断言添加到 tearDown() 方法是否可以,或者这是一个坏习惯,因为它们不是 "cleaning" 任何东西?

这样做的正确方法是什么?

嗯,我以前从没见过这个。我个人不会这样做,因为它不属于那里。我会通过一个装饰器来完成它,它在最后为你做断言。然后只需装饰您确实希望拥有这些断言的测试函数。

有关 python 装饰器的精彩介绍,请参阅 the answers to this question

在您的 tearDown 中断言某些内容意味着您需要注意在实际断言之前完成所有清理,否则如果断言语句失败并引发清理代码可能不会被调用。

如果断言只是一行,那么在每个测试方法中都有它可能是可以的,如果它不止于此,则有可能有一个特定的方法 - 该方法不应该是它自己的测试,即未被您的测试框架识别为测试。使用方法装饰器或 class 装饰器也可能是一种替代方法。

总的来说,tearDown 不应进行任何测试,显式优于隐式。