Я пытаюсь убрать функции синтаксического анализа, которые принимают путь к файлу и возвращают часть содержимого файла. Я хотел бы иметь возможность передавать эти функции в виде строк данных для целей тестирования.Unittesting - замена пути к файлу с объектами StringIO
Я понимаю, что я могу pas csv.reader() либо StringIO, либо file_handle (например, csv.reader (StringIO («my, data») или csv.reader (open (файл))), но я могу ' я вижу способ, которым я могу передать объект StringIO вместо путь к файлу, так как open (StringIO («my, data»)) терпит неудачу. В равной степени я хочу иметь логику открытия/закрытия файла в этих методах синтаксического анализа, а не в основная часть моего кода, как бы засоряют мой основной код, а также означает, что я должен переписать все интерфейсы ввода-вывода файлов
кажется, мой выбор:
- Перепишите все EXI sting-код, чтобы он передавал дескрипторы файлов в функции синтаксического анализа - это настоящая боль!
- Используйте mock.patch() для замены метода open() - это должно работать, но кажется более сложным, чем эта задача должна требовать!
- Сделайте то, о чем я еще не думал, но я убежден, что он должен существовать!
import csv
def parse_file(input):
with open(input, 'r') as f:
reader = csv.reader(f)
output = []
for row in reader:
#Do something complicated
output.append(row)
return output
import unittest
class TestImport(unittest.TestCase):
def test_read_string(self):
string_input = u"a,b\nc,d\n"
output = read_file(string_input)
self.assertEqual([['a', 'b'], ['c', 'd']], output)
def test_read_file(self):
filename = "sample_data.csv"
output = read_file(filename)
self.assertEqual([['a', 'b'],['c', 'd']], output)
Почему бы не просто написать тестовые чехлы на жесткий диск и передать им пути? –
Вот как работает данный код: я стараюсь избегать этого, потому что: ** A ** Я не хочу, чтобы отслеживать множество действительно небольших текстовых файлов ** B ** Разбор имеет множество опций конфигурации - мне легко манипулировать строками в коде, чтобы имитировать их, но для этого с файлом потребуются десятки, что делает мою сборку «беспорядочной». – David258