Класс предположительно вызывает операции файловой системы File.OpenRead()
, File.OpenWrite()
и т. Д. (Я предполагаю, что это C # из-за верблюжьего корпуса.) Затем вы можете создать интерфейс для этих операций, например:
public interface IFileSystem {
StreamReader OpenRead(string fileName);
StreamWriter OpenWrite(string fileName);
}
и заставить конструктор Manager
взять экземпляр IFileSystem
.Затем напишите (не фиктивный) класс, который реализует IFileSystem
, вызывая фактические методы File.OpenRead()
и File.OpenWrite()
, и используйте этот класс в рабочем коде.В тестах вы используете фиктивный фреймворк, как упомянул @Digger (мое личное предпочтение - Moq , но я не пробовал Rhino Mocks, поэтому мне нечего сказать по этому поводу), чтобы макетироватьIFileSystem
и используйте макет, чтобы проверить, что методы были вызваны с правильными сериализованными данными.
РЕДАКТИРОВАТЬ: По запросу, пример в NUnit с Moq (у меня нет IDE здесь, поэтому он не проверен; не стесняйтесь исправлять это):
[Test]
public void BObjectShouldBeSerializedToFile() {
var fileSystemMock = new Mock<IFileSystem>();
var stream = new MemoryStream();
fileSystemMock.Setup(f => f.OpenWrite("theFileNameYouExpect.txt")).Returns(new StreamWriter(stream)).Verifiable();
var manager = new Manager(fileSystemMock.Object);
manager.SaveObject(new BObject(...));
stream.Seek(0, SeekOrigin.Begin);
Assert.That(...); // Perform asserts on the stream contents here
fileSystemMock.Verify(); // Not really necessary, but verify that `OpenWrite` was called
}