【问题标题】:use mock in python to return instead of raising exception?在python中使用mock返回而不是引发异常?
【发布时间】:2017-10-16 06:38:40
【问题描述】:

这是我打算做的:

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)
  • 可能不能。我在某个分支中有另一个return。让我改变描述:)

标签: python unit-testing python-mock


【解决方案1】:

我发现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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多