如何从模拟实例的方法中抛出异常?

时间:2018-02-04 08:48:29

标签: python python-3.5 python-unittest python-mock

我想测试的这个演示功能非常简单。

def is_email_deliverable(email):
    try:
        return external.verify(email)
    except Exception:
        logger.error("External failed failed")
        return False

此函数使用我要模拟的external服务。

但是我无法弄清楚如何从exception抛出external.verify(email),即如何强制执行except子句。

我的尝试:

@patch.object(other_module, 'external')
def test_is_email_deliverable(patched_external):    
    def my_side_effect(email):
        raise Exception("Test")

    patched_external.verify.side_effects = my_side_effect
    # Or,
    # patched_external.verify.side_effects = Exception("Test")
    # Or,
    # patched_external.verify.side_effects = Mock(side_effect=Exception("Test"))

    assert is_email_deliverable("some_mail@domain.com") == False

This问题声称有答案,但对我没有用。

1 个答案:

答案 0 :(得分:3)

您使用side_effects代替side_effect。 它是这样的

@patch.object(Class, "attribute")
def foo(attribute):
    attribute.side_effect = Exception()
    # Other things can go here
顺便说一句,它不是很好的方法来捕获所有Exception并根据它处理。