Использование групп в решетчатом графике с пользовательским символом grImport

Самый верный ответ полезен, но я немного расширил его.

Если вы хотите установить значение вашего файлового объекта (f в as f) на основе аргументов, переданных в open() вот один из способов сделать это:

def save_arg_return_data(*args, **kwargs):
    mm = MagicMock(spec=file)
    mm.__enter__.return_value = do_something_with_data(*args, **kwargs)
    return mm
m = MagicMock()
m.side_effect = save_arg_return_array_of_data

# if your open() call is in the file mymodule.animals 
# use mymodule.animals as name_of_called_file
open_name = '%s.open' % name_of_called_file

with patch(open_name, m, create=True):
    #do testing here

В принципе, open() вернет объект, а with вызовет __enter__() на этом объекте.

To макет, мы должны издеваться над open(), чтобы вернуть макет объекта. Затем этот издевательский объект должен издеваться над ним __enter__() (MagicMock сделает это для нас), чтобы вернуть нужный нам файл / файл (следовательно mm.__enter__.return_value). Выполнение этого с помощью 2 mocks выше, позволяет нам захватывать аргументы, переданные в open(), и передавать их нашему методу do_something_with_data.

Я передал весь макет файла в виде строки в open() и my do_something_with_data выглядел так:

def do_something_with_data(*args, **kwargs):
    return args[0].split("\n")

Это преобразует строку в список, поэтому вы можете сделать следующее, как в обычном файле:

for line in file:
    #do action
0
задан user1536207 22 February 2015 в 21:51
поделиться