我在调用从另一个模块导入的另一个方法的模块中有以下方法:
def imported_function():
do_unnecessary_things_for_unittest()
需要测试的实际方法,导入并使用上述功能:
from somewhere import imported_function
def function_to_be_tested():
imported_function()
do_something_more()
return 42
imported_function 中的内部调用和相关计算并不重要,它们不是我想要测试的,所以我只想在测试实际函数时跳过它们 function_to_be_tested
因此,我试图在测试方法中修补名为某处的模块,但没有运气。
def test_function_to_be_tested(self):
import somewhere
somewhere.__dict__['imported_function'] = lambda : True
问题是,如何在测试时修补模块的方法,以便在测试阶段不会调用它?
答案 0 :(得分:13)
我认为最好使用Mock Library
所以你可以这样做:
from somewhere import imported_function
@patch(imported_function)
def test_function_to_be_tested(self, imported_function):
imported_function.return_value = True
#Your test
我认为单元测试比猴子补丁好。
答案 1 :(得分:8)
假设您有以下文件:
<强> somewhere.py 强>
def imported_function():
return False
<强> testme.py 强>
from somewhere import imported_function
def function_to_be_tested():
return imported_function()
致电testme.function_to_be_tested()
会返回False
。
现在,诀窍是在 somewhere
之前导入testme
:
import somewhere
somewhere.__dict__['imported_function'] = lambda : True
import testme
def test_function_to_be_tested():
print testme.function_to_be_tested()
test_function_to_be_tested()
<强>输出:强>
真
或者,重新加载testme
模块
import testme
def test_function_to_be_tested():
print testme.function_to_be_tested()
import somewhere
somewhere.__dict__['imported_function'] = lambda : True
print testme.function_to_be_tested()
reload(testme)
print testme.function_to_be_tested()
test_function_to_be_tested()
<强>输出:强>
假
假
真