我正在使用python模拟库(python 2.7,mock == 1.0.1),并且在模拟我测试模拟的某些部分代码时,由于某种原因吞噬了异常。
以下是一个例子:
#test.py
from django import test
from something import main_func
class TestCase(test.TestCase):
@mock.patch('something.somewhere')
def test_something(mock_somewhere):
main_func()
#something.py
def somewhere(param):
print param
def main_func():
somewhere(None.missing_something)
那么AttributeError
应该被提出来吗?这个测试是在我的机器上传递,实际上代码更复杂,Django模型应该被保存并存在。测试失败,因为模型不存在。
如果我在import ipdb; ipdb.set_trace()
之前插入somewhere(None.missing_method)
,那么我可以看到AttributeException
已被提出,但它并未显示在测试中。
有什么想法吗?
答案 0 :(得分:0)
我认为你需要使用'spec',例如autospec=True
http://www.voidspace.org.uk/python/mock/patch.html
这将确保如果您尝试访问原始对象上不存在的属性,生成的mock将引发属性错误,否则mock将仅返回任何attr访问的新模拟
例如
from something import main_func
class TestCase(test.TestCase):
@mock.patch('something.somewhere', autospec=True)
def test_something(mock_somewhere):
main_func()