pyfakefs
Звучит очень полезно: он был первоначально разработан как скромная подделка реализации основных модулей Python для поддержки умеренно сложных взаимодействий файловой системы и была внедрена в Google. в сентябре 2006 года. С тех пор он получил много (проверенных) взносов для расширения своей функциональности и полезности и используется в более чем 900 тестах Google Python ».Как заменить ссылки на файл для тестируемого модуля
Документация, по-видимому, доступна только в пределах докстерий самого source code. В нем объясняется, что модуль содержит следующие элементы:
- FakeFile: Обеспечивает внешний вид реального файла.
- FakeDirectory: Обеспечивает внешний вид реальной директории.
- FakeFilesystem: Обеспечивает появление реальной иерархии каталогов.
- FakeOsModule: Использует FakeFilesystem для обеспечения поддельной замены модуля os.
- FakePathModule: Fake замена модуля os.path.
- FakeFileOpen: Fake file() и функция open().
Документация, однако, не объясняет, как эффективно использовать эти элементы при тестировании.
Каков правильный способ убедиться, что тестируемый модуль обращается к поддельной файловой системе, а не к реальной?
Я думаю, что те API, которые вы обнаружили в docstrings, в основном - то, что вам нужно, чтобы вызвать тестирование. Таким образом, вы можете поместить его в индивидуальный метод тестирования или настройку или setupClass (или tearDown *). Что еще вас беспокоит? – CppLearner
Я не понимаю, как заставить тестируемый модуль использовать файловую систему, которую я создаю с помощью API 'fake_filesystem'. Я не думаю, что имеет смысл, например, предоставить функцию 'file()' для классов или функций моего модуля только для того, чтобы включить тестирование. Я предпочел бы сделать это с помощью «доброжелательной обезьяны-патчей» таким же образом, как [этот ответ] (http://stackoverflow.com/questions/295438/how-can-one-mock-stub-python-module- вроде-urllib? rq = 1 # answer-295481), но я точно не знаю, что делать с обезьяной-патчем. – intuited
Обезболивание не очень просто, если вам нужно сделать это с самого начала. Вы можете проверить mock-библиотеку с Python и использовать ее для обезьян-патча определенных операций, предоставив объект, который вы хотите вернуть классу. Я могу немного подумать через день или два. Тем временем я увижу, могут ли другие дать вам некоторые мысли. Альтернативой является инъекция зависимостей, но это работает и имеет смысл, если ваша функция или метод явно передаются в некоторых зависимостях, например, файл-подобный объект или объект сеанса базы данных. – CppLearner