Python模拟吞咽异常

Python模拟吞咽异常,python,django,unit-testing,mocking,Python,Django,Unit Testing,Mocking,我正在使用python模拟库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)

我正在使用python模拟库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模型应该保存并存在。测试失败,因为模型不存在

如果我插入导入ipdb;ipdb.set_trace就在somewhereNone.missing_方法之前,然后我可以看到引发了AttributeException,但它没有显示在测试中


有什么想法吗?

我认为您需要使用“规范”,例如autospec=True

然后,如果您试图访问原始对象上不存在的属性,这将确保生成的mock将引发属性错误,否则mock将只为任何attr访问返回一个新的mock

乙二醇


出于好奇。。。单元测试文件末尾是否有if uuu name_uuu='\uuuu main\uuuu':unittest.main行?请修复无法运行的代码:错误太多,无法理解原因。我已经修复了测试类parent unittest.TestCase和self、mock_的测试参数,它会按预期引发异常。无论如何,如果你在调试器中看到异常,但测试没有抓取它,我猜你有更多的线程,异常不在你的测试线程中,而是在另一个线程中。我已经添加了1行,现在可以运行这段代码了。我提到了Django模型,这是Django中的一个有效测试用例,由它的测试运行程序发现,我不需要一个_名称_。这没有使用任何线程,它只是一个普通的django应用程序,正在测试的方法只是在模型实例上运行的实用方法。@DominicSantos AFAIK test_的签名有问题:你忘了在新的django项目中剪切和粘贴代码,修正了添加self作为第一个参数的测试签名,我无法重现你的问题。在我这方面,somewhereNone.missing_something会像预期的那样引发异常。autospec=True甚至是一个很好的建议,但它与他键入None的问题无关。missing_something和None不是一个补丁实例。是的,我只是假设所讨论的代码不是一个完整的真实示例,潜在的问题是这样的
from something import main_func

class TestCase(test.TestCase):
  @mock.patch('something.somewhere', autospec=True)
  def test_something(mock_somewhere):
    main_func()