跳到内容

pytest-patch-with-lambda (PT008)

源自 flake8-pytest-style linter。

作用

检查模拟调用是否使用了虚拟 lambda 函数,而不是 return_value

为什么这不好?

在 patching 调用时,显式的 return_valuelambda 函数更好地传达意图,假设 lambda 不使用传递给它的参数。

return_value 对已 patching 的函数的签名更改也具有鲁棒性,并允许进行其他断言以验证行为。例如,return_value 允许通过 assert_called_once_with 和相关方法验证调用次数或传递给已 patching 函数的参数。

示例

def test_foo(mocker):
    mocker.patch("module.target", lambda x, y: 7)

建议改为

def test_foo(mocker):
    mocker.patch("module.target", return_value=7)

    # If the lambda makes use of the arguments, no diagnostic is emitted.
    mocker.patch("module.other_target", lambda x, y: x)

参考