Python mock吞下异常

时间:2015-03-23 17:13:30

标签: python django unit-testing mocking

我正在使用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已被提出,但它并未显示在测试中。

有什么想法吗?

1 个答案:

答案 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()