在python中使用mock返回而不是引发异常?

时间:2017-05-17 01:25:12

标签: python unit-testing python-mock

这是我打算做的事情:

def foo(flag):
    """
    other irrelevant code
    """
    if flag:
        import random
        return random.random()
    """
    other irrelevant code
    """
    raise Exception()

我知道mock可用于更改类或函数的行为,但不确定如何使用它来返回而不是引发异常。

我想知道mock是否有任何方式可以将此raise更改为返回内容,而不会影响其他代码

1 个答案:

答案 0 :(得分:0)

我发现wraps参数对这种情况很有帮助。在这里,我创建了一个泛型函数capture,它将传递任何返回值,但会将异常转换为返回值。然后我将mock.patchwraps参数一起使用。 我使用functools.partialcapture函数知道我们要包装的内容。 未经测试,但这应该给出基本的想法。

def capture(fn, *args, **kwargs):
    try: return fn(*args, **kwargs)
    except Exception: return whatever_you_like

importe module, functools
with mock.patch('module.foo', wraps = functools.partial(capture, module.foo)):
    do stuff