Доступ к pytest capsys изнутри теста - PullRequest
0 голосов
/ 21 февраля 2020

Я проверил ответы здесь и также здесь , но они не отвечают на мой вопрос.

Документы1 показывают, что у вас есть отправить capsys в качестве параметра, как таковое def test_output(capsys):, что также показано в этом другом примере docs2 .

Однако, None имеет полный пример, который говорит мне, как получить доступ к capsys

Так что в моем случае у меня есть какая-то функция

 # import a bunch of other modules
 # run a test not calling from terminal

 import pytest 

 def foo():
     print('bar')


 def test_foo(capsys):
     foo()
     captured = capsys.readouterr()
     assert len(captured.out) > 1

Я знаю, что я Я упускаю что-то простое здесь, но я искал по ссылкам выше и более и не нашел никаких предложений.

РЕДАКТИРОВАТЬ: Дело в том, что у меня нет доступа к вызову test_foo() с capsys У меня нет параметра для его отправки.

EDIT2: Я был в состоянии запустил терминал с python -m pytest, но все же Pythoni c не имеет смысла для меня, отправьте параметр для функции, которой у меня нет ... Следовательно, я не могу самостоятельно протестировать модуль, используя

if __name__ == '__main__':
    test_foo() 

# This does not work because I don't have `capsys`

Итак, все еще нуждаются в разъяснениях.

1 Ответ

1 голос
/ 22 февраля 2020

Это не то, как pytest тесты работают.
Они не могут быть выполнены напрямую. Скорее, вы должны вызывать pytest либо в командной строке, либо вызывая pytest.main() в своем коде. Оба вызова работают абсолютно одинаково при одинаковых аргументах.

Pytest должен выполнить некоторую расширенную инициализацию перед запуском тестов, включая загрузку всех приборов (как встроенных, например capsys, так и самоопределенных) , Затем он выполняет тестовое обнаружение в данном модуле или пути (используя параметры / аргументы командной строки для фильтрации тестов или изменения поведения) и выполняет тесты, используя в качестве параметров фиксаторы, предоставленные тестам. Невозможно напрямую вызвать тест, поскольку приборы не известны за пределами pytest.

Подводя итог: pytest тесты нельзя запустить напрямую, вызвав их, вы должны использовать pytest в командной строке или pytest.main() в скрипте для этого. Для получения дополнительной информации, пожалуйста, проверьте соответствующую документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...