如何在Python中使用mock模块返回值而不是抛出异常?

3
这是我的计划:

我打算做的事情:

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

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

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


你尝试过使用以下装饰器吗:@mock.patch('path.to.foo', return_value=whatever_you_want) - Daniel Reinoso
可能不行。我在某个分支中有另一个return。让我改一下描述 :) - Justin Li
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接