написать функцию Pytest для проверки вывода в файл в Python?

я попросилэто Вопрос о том, как написать pytest для проверки вывода вstdout и получил решение. Теперь мне нужно написатьtest case, чтобы проверить, записано ли содержимое в файл и правильно ли оно записано, например:

def writetoafile():
   file = open("output.txt",w)
   file.write("hello\n")
   file.write("world\n")
   file.close()

теперь функция pytest, чтобы проверить, написано ли это:

def test_writeToFile():
    file = open("ouput.txt",'r')
    expected = "hello\nworld\n"
    assert expected==file.read()

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

 Pierre-Francoys Brousseau12 дек. 2013 г., 00:16
Почему это не было бы идеально? Вы написали, что хотите проверить, что содержимое написано, как и ожидалось, поэтому поиск в файле и проверка кажутся наилучшим вариантом. Вы всегда можете создать переменную с рядом случайных символов и проверить, была ли она написана успешно; Вы можете проверить «Ожидается в file.read ()», чтобы увидеть, были ли данные добавлены (но вы использовали флаг 'w', так что это плохой тест здесь); и т.д. Что вы хотите проверить, если не это? Возможно, зная, что вы хотите, это реальный вопрос здесь, как и в большинстве тестов.

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

Решение Вопроса

Здесьприспособление tmpdir который создаст вам временный каталог для каждого теста. Таким образом, тест будет выглядеть примерно так:

def writetoafile(fname):
    with open(fname, 'w') as fp:
        fp.write('Hello\n')

def test_writetofile(tmpdir):
    file = tmpdir.join('output.txt')
    writetoafile(file.strpath)  # or use str(file)
    assert file.read() == 'Hello\n'

Здесь вы реорганизуете код, чтобы он также не был жестко закодирован, что является ярким примером того, как тестирование вашего кода помогает вам лучше его проектировать.

 brain storm13 дек. 2013 г., 00:59
что делает tmpdir? так он создает файл практически в памяти?
 flub13 дек. 2013 г., 11:49
Он создает настоящий каталог, который вы можете просмотреть позже, в UNIX вы обычно найдете их в/tmp/pytest-xxxx с символическими ссылками на последний запуск. Вы всегда можете узнать о светильниках, вызвавpy.test --fixtures и для случая tmpdir, пожалуйста, обратитесь кpytest.org/latest/tmpdir.html Больше подробностей.

Ваш ответ на вопрос