Я пишу метод, который будет записывать в текстовый файл. Я все еще пытаюсь обернуть голову вокруг инверсии зависимости.
Похоже, у меня проблема с насмешкой StreamWriter.
Вот мой тест, я закомментировал одну из строк настройки, так как именно здесь моя проблема.
[Test]
public void WriteToAutomationLog_FileDoesNotExist_CreateFile()
{
//arrange
mockDirectoryWrapper.Setup(_ => _.Exists(It.IsAny<string>())).Returns(true);
mockFileWrapper.Setup(_ => _.Exists(It.IsAny<string>())).Returns(false);
mockFileWrapper.Setup(_ => _.CreateText(logFile.GetAutomationLogsPath() + fileName)).Verifiable();
//mockFileWrapper.Setup(_ => _.CreateText(logFile.GetAutomationLogsPath() + fileName)).Returns(new StreamWriter(fileName)).Verifiable();
//act
logFile.WriteToAutomationLog(fileName, message);
//assert
mockFileWrapper.Verify(_ => _.CreateText(logFile.GetAutomationLogsPath() + fileName), Times.Exactly(1));
}
Вот мой метод, который я тестирую на
public void WriteToAutomationLog(string fileName, string message)
{
//Ensure the automation logs path still exists.
if (_directoryWrapper.Exists(automationLogsPath))
{
//Check if file exists
if (_fileWrapper.Exists(automationLogsPath + fileName))
{
//Append to log file
using (StreamWriter sw = _fileWrapper.AppendText(automationLogsPath + fileName))
{
}
}
else
{
//Create new file
using (StreamWriter sw = _fileWrapper.CreateText(automationLogsPath + fileName))
{
sw.Write(message);
}
}
}
}
У меня есть оболочки для класса Directory и File. У меня возникает проблема, когда я вызываю sw.Write (message), в моем тесте sw is null Когда я использую закомментированную строку кода, которая возвращает StreamWriter, я получаю сообщение об ошибке, в котором запрещен доступ к файлу. Однако я не хочу на самом деле читать файл на жестком диске. Как я могу насмехаться над StreamWriter?
В дополнение к этому, если я закомментирую sw.Write (сообщение), мой тест пройден. Эта проблема возникла, когда я добавил еще один тест для тестирования sw.Write, поэтому, когда я добавил этот код, мой старый тест сломался (тот, который я опубликовал).