#c# #unit-testing #file-io
#c# #модульное тестирование #file-io
Вопрос:
Я пишу репозиторий на основе XML. На данный момент это единый класс с базовыми операциями CRUD. Один из параметров, передаваемых в конструкторе, относится url
к файлу, в котором будет храниться репозиторий.
общедоступный репозиторий (string fileURL, схема IRepositorySchema)
Теперь я хотел бы написать модульные тесты для этого класса. Я не хочу использовать реальные файлы. Я провел некоторое исследование и нашел библиотеку SystemWrapper, которая может помочь мне с этой задачей.
Комментарии:
1. Похоже, это правильный подход. У вас есть конкретные сомнения по этому поводу?
2.
File
класс статичен, так как я могу его внедрить? Я слышал, что есть способы сделать это.3. Когда вы используете оболочку, вы не вызываете статические методы BCL. Весь смысл оболочки в том, чтобы не вызывать их. Вызов через интерфейс. Внедрите реализацию этого интерфейса и используйте этот объект.
4. Вау, я этого не понял. Я собираюсь попробовать с этим.
5. Должен ли я использовать IFileWrap или есть какой-либо другой более подходящий интерфейс для этой цели?
Ответ №1:
System.IO.File
статические методы, но вместо этого вы передаете экземпляр файла в репозиторий as SystemInterface.IO.IFile
и выполняете все вызовы через него, так же, как вы делаете со схемой репозитория:
public Repository(SystemInterface.IO.IFile file, IRepositorySchema schema)
Затем для производства вы будете использовать SystemWrapper.IO.FileWrap
instace, предоставляемый SystemWrapper, который реализован с использованием System.IO.File
, а для тестирования вы предоставите свою собственную SystemInterface.IO.IFile
реализацию, соответствующую вашим потребностям в тестировании.
Ответ №2:
Я бы рекомендовал взглянуть на System.IO.Abstractions. Похоже, он находится в стадии более активной разработки.
Вы можете использовать тот же подход и с ним. Просто вводите конструктор IFileSystem
. Затем в своих модульных тестах вы можете имитировать это с помощью библиотеки по вашему выбору или использовать удобные помощники по тестированию, которые поставляются вместе с библиотекой.