繁体   English   中英

Python,mock:引发异常[关闭]

[英]Python, mock: raise exception [closed]

我在测试中从函数中引发异常时遇到问题:

### Implemetation
def MethodToTest():
    myVar = StdObject()
    try:
        myVar.raiseError() # <--- here
        return True
    except Exception as e:
        # ... code to test
        return False

### Test file
@patch('stdLib.StdObject', autospec=True)
def test_MethodeToTest(self, mockedObjectConstructor):
    mockedObj = mockedObjectConstructor.return_value
    mockedObj.raiseError.side_effect = Exception('Test') # <--- do not work
    ret = MethodToTest()
    assert ret is False

我想raiseError()函数引发错误。

我在SO上找到了几个例子,但没有一个符合我的需要。

我变了

@patch('stdLib.StdObject', autospec=True)

@patch('stdLib.StdObject', **{'return_value.raiseError.side_effect': Exception()})

并删除# <--- do not work行。

它现在正在运作。

是一个很好的例子。

编辑:

mockedObj.raiseError.side_effect = Mock(side_effect=Exception('Test'))

也有效。

好吧,你提供的答案是有效的,但是你改变了你的方式(这很好。要修复你原来的问题,你需要为side_effect分配一个函数,而不是结果或一个对象:

def my_side_effect():
    raise Exception("Test")

@patch('stdLib.StdObject', autospec=True)
def test_MethodeToTest(self, mockedObjectConstructor):
    mockedObj = mockedObjectConstructor.return_value
    mockedObj.raiseError.side_effect = my_side_effect # <- note no brackets, 
    ret = MethodToTest()
    assert ret is False

希望有所帮助。 注意,如果目标方法采用args,副作用也需要采取args(我相信)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM