Pytest-如何模拟或修补全局变量

问题描述 投票:0回答:1

我有以下文件,并且我正在此文件上运行pytests。用例之一是测试全局的记录器功能。我们如何在pytest中模拟呢?

import spark_fn

def run_job(params):
    do_something()
    logger.info("some info")

def main(params):
    global logger
    app_name = "test app"
    spark, logger = spark_fn(app_name)
    run_job(params)

if __name__ == "__main__":
    params = "some params"
    main(params)


===============================================================
python-3.x mocking pytest monkeypatching
1个回答
0
投票

这样的东西怎么样?您应该将其视为全局变量而不是修补spark_fn返回的内容,以使其具有“伪”记录器类。另外,我很好奇您整体上如何使用spark_fn模块以及如何导入它。

import yoursampletest

def test_monkeytest(monkeypatch):
    """
        Monkey patches a fake logger into spark_fn
    """
    class myFakeLogger:

        def info(self, value):
            return value

    def mock_info(mylogstatement):
        return 1, myFakeLogger()

    monkeypatch.setattr(yoursampletest, 'spark_fn', mock_info)

    assert yoursampletest.main(1) == 'some info'
© www.soinside.com 2019 - 2024. All rights reserved.