2013-05-09 2 views
6

pyfakefs Звучит очень полезно: он был первоначально разработан как скромная подделка реализации основных модулей Python для поддержки умеренно сложных взаимодействий файловой системы и была внедрена в Google. в сентябре 2006 года. С тех пор он получил много (проверенных) взносов для расширения своей функциональности и полезности и используется в более чем 900 тестах Google Python ».Как заменить ссылки на файл для тестируемого модуля

Документация, по-видимому, доступна только в пределах докстерий самого source code. В нем объясняется, что модуль содержит следующие элементы:

  • FakeFile: Обеспечивает внешний вид реального файла.
  • FakeDirectory: Обеспечивает внешний вид реальной директории.
  • FakeFilesystem: Обеспечивает появление реальной иерархии каталогов.
  • FakeOsModule: Использует FakeFilesystem для обеспечения поддельной замены модуля os.
  • FakePathModule: Fake замена модуля os.path.
  • FakeFileOpen: Fake file() и функция open().

Документация, однако, не объясняет, как эффективно использовать эти элементы при тестировании.

Каков правильный способ убедиться, что тестируемый модуль обращается к поддельной файловой системе, а не к реальной?

+0

Я думаю, что те API, которые вы обнаружили в docstrings, в основном - то, что вам нужно, чтобы вызвать тестирование. Таким образом, вы можете поместить его в индивидуальный метод тестирования или настройку или setupClass (или tearDown *). Что еще вас беспокоит? – CppLearner

+0

Я не понимаю, как заставить тестируемый модуль использовать файловую систему, которую я создаю с помощью API 'fake_filesystem'. Я не думаю, что имеет смысл, например, предоставить функцию 'file()' для классов или функций моего модуля только для того, чтобы включить тестирование. Я предпочел бы сделать это с помощью «доброжелательной обезьяны-патчей» таким же образом, как [этот ответ] (http://stackoverflow.com/questions/295438/how-can-one-mock-stub-python-module- вроде-urllib? rq = 1 # answer-295481), но я точно не знаю, что делать с обезьяной-патчем. – intuited

+0

Обезболивание не очень просто, если вам нужно сделать это с самого начала. Вы можете проверить mock-библиотеку с Python и использовать ее для обезьян-патча определенных операций, предоставив объект, который вы хотите вернуть классу. Я могу немного подумать через день или два. Тем временем я увижу, могут ли другие дать вам некоторые мысли. Альтернативой является инъекция зависимостей, но это работает и имеет смысл, если ваша функция или метод явно передаются в некоторых зависимостях, например, файл-подобный объект или объект сеанса базы данных. – CppLearner

ответ