我使用的是python mock库(python2.7,mock==1.0.1),当我模拟出我正在测试的代码的某些部分时,由于某种原因,mock会吞噬异常。
下面是一个示例:
#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模型应该被保存并存在。测试失败是因为模型不存在。
如果我在somewhere(None.missing_method)之前插入一个import ipdb; ipdb.set_trace(),那么我可以看到AttributeException被抛出了,但是它在测试中没有显示出来。
有什么想法吗?
发布于 2015-03-24 01:19:06
我认为你需要使用一个'spec‘,比如autospec=True
http://www.voidspace.org.uk/python/mock/patch.html
这将确保,如果您试图访问原始对象上不存在的属性,则生成的mock将引发属性错误,否则mock将为任何attr访问返回一个新的mock
例如
from something import main_func
class TestCase(test.TestCase):
@mock.patch('something.somewhere', autospec=True)
def test_something(mock_somewhere):
main_func()https://stackoverflow.com/questions/29216251
复制相似问题