如何在unittest中模拟python模块

问题描述:

我在单元测试中嘲笑时遇到了问题。如何在unittest中模拟python模块

#!/usr/bin/env python 
import sys 
sys.modules["foo.Bar"] = __import__("mock_bar") 
import foo.Bar 
print foo.Bar.__name__ 

我有一个ImportError例外在第4行,我不知道为什么,因为我有做在第3行一些模拟还有就是如何嘲笑进口here参考。 这里的错误消息:

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    import foo.Bar 
ImportError: No module named foo.Bar 

“进口foo.Bar”应该等于“__import __(‘foo.Bar’)”,而在此之前,我砍死sys.modules中假装模块“foo.Bar '已经被导入。为什么python仍然尝试导入foo.Bar并抱怨?

+0

@MartijnPieters对不起,我的文书错误 – Meng 2013-03-14 12:58:44

+0

有没有'foo'模块? – 2013-03-14 13:02:47

+0

@MartijnPieters实际上,“foo”是包名,“Bar”是模块名。 “foo/Bar.py”是我想嘲笑的目标。所以没有“foo/Bar.py”文件,而是“mock_bar.py”。 – Meng 2013-03-14 13:10:33

尝试做import foo之前您的__import__线:我认为它可以帮助。