Прежде всего, я знаком с концепцией Mocking for Unit Tests, и я пишу приложение в соответствии с TDD.Как скомпилировать файл FileStream File.Open
У меня есть метод, в котором мне нужно прочитать файл. Файл, читается:
using (var webshopXmlFileStream = StreamFactory.Create(importFile))
{
// Opens a reader that will read the Xml file.
using (var reader = XmlReader.Create(webshopXmlFileStream))
{
// Read the nodes "Node" and "ArticleGroup" recursively.
var nodes = XmlReaderUtils.EnumerateAxis(reader, new[] { "Node", "ArticleGroup" });
}
}
Конечно, это не единичный тест-состоянии.
Таким образом, я создал интерфейс под названием IStreamFactory
, который имеет один единственный метод:
Stream Create(string filePath);
Реализация этого интерфейса выглядит следующим образом:
public Stream Create(string filePath)
{
return File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
}
Итак, теперь я могу издеваться интерфейс для возврата MemoryStream
, например:
const string webshopXmlData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<Node>" +
"<Name></Name>" +
"</Node>";
var streamFactoryMock = new Mock<IStreamFactory>();
streamFactoryMock.Setup(action => action.Create(It.IsAny<string>())).Returns((string input) => new MemoryStream(Encoding.ASCII.GetBytes(webshopXmlData)));
Проблема в том, ru Я тестирую единицы измерения, reader
- null
, а nodes
- в приложении.
У кого-нибудь есть идея, что случилось?
Спасибо за разъяснение. Я принял это как ответ, потому что вы затронули хороший момент здесь, но проблема действительно заключается в моей строке Xml. Поэтому возвращаемые результаты были пустыми. – Complexity