addCleanup 与拆解

addCleanup vs tearDown

最近,Ned Batchelder 在 his talk at PyCon 2016 期间指出:

If you are using unittest to write your tests, definitely use addCleanup, it's much better than tearDown.

到现在为止,我从来没有用过addCleanup(),习惯了setUp()/tearDown()一对测试方法"set up"和"tear down"阶段。

为什么我应该切换到 addCleanup() 而不是 tearDown()


最近在 Python unittest with Robert Collins 播客中也对此进行了讨论。

根据 addCleanup doc string:

Cleanup items are called even if setUp fails (unlike tearDown)

addCleanup可以用来注册多个函数,所以你可以使用 为您希望清理的每个资源提供单独的功能。那会让你的 代码要多一点reusable/modular.

addCleanup() 方法将 运行 即使其中一个失败,并且将 运行 即使 setUp() 失败。您还应该考虑使用 pytest.

addCleanup 的另一个好处是它的工作方式与您预期的一样。

比如你在setUp函数中调用,那么所有的测试方法最后都会调用cleanup函数

如果在测试方法中调用,只有该方法调用清理函数。