Как проверить печатные выписки?

Вы хотите написатьunittestслучаи для такой функции:

def test_me(a):
    for b in c:
        print do_something(a,b)

Сначала я думал о сборе результатовdo_something в строке и затем возвращая ее, чтобы распечатать и проверить весь вывод вместе. Но это не всегда удобно, поскольку такие циклы могут привести к увеличению размера строки буфера в зависимости от обстоятельств. Итак, что вы можете сделать, чтобы проверить вывод, когда он печатается и не возвращается?

Ответы на вопрос(2)

В Python 3 его легко использоватьunittest.mock на встроенномprint функция:

from unittest.mock import patch, call

@patch('builtins.print')
def test_print(mocked_print):
    print('foo')
    print()

    assert mocked_print.mock_calls == [call('foo'), call()]

print печатает наsys.stdout, который вы можете переназначить своему собственному объекту, если хотите. Единственное, что нужно вашему объекту - этоwrite функция, которая принимает один строковый аргумент.

С Python 2.6 вы также можете изменитьprint быть функцией, а не языковой конструкцией, добавивfrom __future__ import print_function в начало вашего сценария. Таким образом, вы можете переопределитьprint со своей собственной функцией.

ВАШ ОТВЕТ НА ВОПРОС