Ответ 1
Используйте приспособление capfd
.
Пример:
def test_foo(capfd):
foo() # Writes "Hello World!" to stdout
out, err = capfd.readouterr()
assert out == "Hello World!"
Смотрите: http://pytest.org/latest/fixture.html для более подробной информации
И посмотрите: py.test --fixtures
для списка встроенных приборов.
В вашем примере есть несколько проблем. Вот исправленная версия:
def f(name):
print "hello {}".format(name)
def test_f(capfd):
f("Tom")
out, err = capfd.readouterr()
assert out == "hello Tom\n"
Замечания:
- Не используйте
sys.stdout
- Используйте приспособлениеcapfd
как есть, как это предусмотрено pytest. - Запустите тест с помощью:
py.test foo.py
Результат тестового прогона:
$ py.test foo.py
====================================================================== test session starts ======================================================================
platform linux2 -- Python 2.7.5 -- pytest-2.4.2
plugins: flakes, cache, pep8, cov
collected 1 items
foo.py .
=================================================================== 1 passed in 0.01 seconds ====================================================================
Также обратите внимание:
- Вам не нужно запускать ваши тестовые функции в ваших тестовых модулях.
py.test
(инструмент CLI и Test Runner) сделает это за вас.
py.test в основном делает три вещи:
- Собери свои тесты
- Запустите ваши тесты
- Показать статистику и, возможно, ошибки
По умолчанию py.test
ищет (конфигурируемый IIRC) test_foo.py
тестовых модули и test_foo()
функцию тестирования в тестовых модулях.