Pytest - Как смоделировать или исправить глобальные переменные - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть следующий файл, и я запускаю 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)


===============================================================

1 Ответ

0 голосов
/ 19 февраля 2020

Как как то так? Вы должны думать об этом не столько как о глобальной переменной, сколько о том, чтобы исправлять то, что 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'
...