Я пытаюсь использовать pytest, чтобы проверить, записывает ли моя функция ожидаемый текст, такой как адресуемый этот вопрос (эквивалент pyunit будет assertLogs ). Следуя документации pytest , я передаю прибор caplog
тестеру. Документация гласит:
Наконец, все журналы, отправляемые регистратору во время тестового прогона, становятся доступными на приборе в виде экземпляров logging.LogRecord и окончательного текста журнала.
Модуль, который я тестирую:
import logging
logger = logging.getLogger(__name__)
def foo():
logger.info("Quinoa")
Тестер:
def test_foo(caplog):
from mwe16 import foo
foo()
assert "Quinoa" in caplog.text
Я ожидаю, что этот тест пройдёт. Однако выполнение теста с pytest test_mwe16.py
показывает сбой теста из-за того, что caplog.text
пусто:
============================= test session starts ==============================
platform linux -- Python 3.7.3, pytest-5.3.0, py-1.8.0, pluggy-0.13.0
rootdir: /tmp
plugins: mock-1.12.1, cov-2.8.1
collected 1 item
test_mwe16.py F [100%]
=================================== FAILURES ===================================
___________________________________ test_foo ___________________________________
caplog = <_pytest.logging.LogCaptureFixture object at 0x7fa86853e8d0>
def test_foo(caplog):
from mwe16 import foo
foo()
> assert "Quinoa" in caplog.text
E AssertionError: assert 'Quinoa' in ''
E + where '' = <_pytest.logging.LogCaptureFixture object at 0x7fa86853e8d0>.text
test_mwe16.py:4: AssertionError
============================== 1 failed in 0.06s ===============================
Почему caplog.text
пусто, несмотря на foo()
отправку текста в регистратор? Как использовать pytest
, чтобы caplog.text
захватывал зарегистрированный текст или иным образом проверял, что текст записывается в журнал?