2016-10-22 8 views
1

Я пишу модульный тест для встроенного программного кода в python.Как издеваться над существованием конкретного файла в тестовом модуле python?

Один из файлов требует наличия файла. (например, «/dir_name/file_name.txt»), в противном случае возникает ошибка.

Обычно этот файл существует на аппаратном устройстве, и мой код на Python читает этот файл. При написании модульных тестов для кода python, как я могу высмеять существование файла?

tempfile.mkstemp(), похоже, не генерирует точное имя пути/файла, которое я хочу, это /dir_name/file_name.txt. Он всегда добавляет некоторые случайные буквы.

Это с Python3.4. Можно ли это сделать с помощью unittest.mock?

+0

Вы * на самом деле * нужен этот штраф, чтобы существовать? Или вы спрашиваете, как вы можете издеваться над этим, чтобы все, что вы испытываете, думает, что оно существует? Можете ли вы предоставить образец своего кода и то, что вы тестируете? Я думаю, у меня есть идея, но я хотел бы посмотреть, каков ваш нынешний подход. – idjaw

+0

Нет, он не должен существовать. Пока я могу сделать свой код _believe_, что файл существует, тогда все в порядке. – sh0731

+0

Отлично. Можете ли вы показать часть кода, чтобы узнать, как удовлетворить решение? Здесь есть разные варианты, но было бы замечательно узнать, каков ваш нынешний подход - узнать, как дать более релевантное решение. – idjaw

ответ

0

Вы можете создать менеджер контекста, который создает и удаляет файл.

from contextlib import contextmanager 

@contextmanager 
def mock_file(filepath, content=''): 
    with open(filepath, 'w') as f: 
     f.write(content) 
    yield filepath 
    try: 
     os.remove(filepath) 
    except Exception: 
     pass 


def test_function(): 
    with mock_file(r'/dirname/filename.txt'): 
     function()