我有以下文件:
test_temp.py
:
import pytest
from mock import patch
with patch('temp.TheEvilClass'), patch('temp2.TheEvilClass'):
from temp import TempClass
def test_evil():
assert True
temp.py
:
from temp2 import TheEvilClass
class TempClass(object):
TheEvilClass()
temp2.py
:
class TheEvilClass(object):
print "I'm evil! ]:>"
raise Exception
我的目的是让test_temp.py
中的补丁模仿TheEvilClass
,以便永远不会调用异常。我尝试在两个地方修补它,但异常仍然被抛出。你有没有指出我做错了什么以及如何测试temp.py
而没有触发实际的TheEvilClass
?我尝试模拟整个模块(使用patch('temp2')
),但这似乎也不起作用。
答案 0 :(得分:1)
mock
无法实现您尝试做的事情,因为补丁本身会触发导入。 patch
使用调用_get_target
的{{1}}来调用_importer
。
https://github.com/testing-cabal/mock/blob/master/mock/mock.py#L1206
更简单的方法是直接应用补丁:
__import__
正确的方法是设置测试环境,以便在导入时不会引发未处理的异常。