c# #filesystems
#c# #файловые системы
Вопрос:
Согласно документации System.IO.Abstractions записывает только в память, а не на диск, тогда почему этот код записывается на диск? Я очень смущен.
using System.IO.Abstractions;
public class Settings
{
readonly IFileSystem fileSystem;
public Settings(IFileSystem fileSystem)
{
this.fileSystem = fileSystem;
}
public Update()
{
this.fileSystem.File.WriteAllText(Path, Text); // writing to disc ???
}
}
Комментарии:
1. Какой конкретный тип
fileSystem
имеет? Если это такnew FileSystem()
, в документах указано «реализация по умолчанию, которая вызывает System.IO «. Если это aMockFileSystem
, да, оно должно быть только в памяти2. Нигде нет ни единого упоминания о том, что это работает только в памяти, этот вопрос не имеет смысла. Даже на главной странице есть следующее:
fileSystem: new FileSystem() //use default implementation which calls System.IO
Ответ №1:
Вам нужно использовать правильный конкретный тип при вызове Settings
конструктора. Если fileSystem
выполняется запись на диск, вы используете:
System.IO.Abstractions:FileSystem
Вместо этого используйте:
System.IO.Abstractions.TestingHelpers:MockFileSystem
Комментарии:
1. Хорошо, я понимаю, но какова цель иметь 2 конструктора и явно создавать экземпляр «new FileSystem ()»? Например, этот пост dontcodetired.com/blog/post /… говорит: «Если используется конструктор без параметров (например, в рабочей среде), будет использоваться экземпляр файловой системы, однако во время тестирования может быть предоставлена макет IFileSystem». Итак, я подумал, что один конструктор используется для производства, а другой — для тестирования, и именно поэтому я запутался, поскольку в моем коде у меня есть только 1 конструктор. Кстати, нам действительно нужны 2 конструктора?