如何在测试用例中伪造sys.stdout.istty而不与pytest stdout捕获冲突?

时间:2019-01-25 14:42:37

标签: mocking pytest

我需要在一个测试用例中伪造sys.stdout.istty()的返回值。使用monkeypatch.setattr("sys.stdout.isatty", lambda: True)进行Monkeypatching是不可选项,因为在使用选项-s时,它与pytest stdout捕获冲突。如何在测试用例级别上伪造?

1 个答案:

答案 0 :(得分:0)

Python does not allow monkey-patching built-in types such as file.sys.stdout is a file object.补丁必须应用于生产代码模块名称空间(<module>.sys.stdout)。使用pytest-mock(夹具mocker)时,外观如下:

def test_of_prod_code_with_dependency(mocker):
    stdout_mock = mocker.patch("<module>.sys.stdout")
    stdout_mock.isatty.return_value = istty

    # production code which depends on sys.stdout.isatty() comes here