如何在模块级别取消设置mock.MagicMock?

时间:2015-07-26 04:51:07

标签: python mocking magicmock

假设有人将模块设置为python文件头部的MagicMock:

sys.modules['moduleABC'] = mock.MagicMock()

这会导致麻烦,因为当我尝试运行整个单元测试列表时,moduleABC将是一个模拟。

如何在其余文件中将其设置为实际的moduleABC?

1 个答案:

答案 0 :(得分:1)

我认为更好的方法是将单元测试更改为在setUp函数中使用patch,然后它将适用于该模块中的所有测试,但最终会被还原,这也是更好的,因为每个测试都拥有它,而不是一个单独的模拟所有它们(例如,如果你测试模块中调用方法的时间,你将不得不累积所有的调用测试...)

另一种选择是使用tearDown函数并按照您将模拟分配的方式进行更改:

import moduleABC

orig_abc = sys.modules['moduleABC']
sys.modules['moduleABC'] = mock.MagicMock()

def tearDown():
    sys.modules['moduleABC'] = orig_abc

但我强烈推荐第一种选择,因为这是更好的方法。