Я должен записать модульные тесты на класс, который читает XML-файл и анализирует, это довольно. Как я могу Дразнить чтение файла? Поскольку все содержание тестов должно быть против файла чтения.
Я использую nmock2 с nUnit.
Спасибо
Как предполагает rwwilden, жизнь намного проще, если вы используете API на основе потоков вместо API на основе имени файла. Использование насмешек здесь не очень уместно, ИМО; вы не проводите «тестирование протокола» - вам просто нужен источник данных.
Вы также можете предоставить перегрузку, которая представляет собой простой служебный метод:
public Result ParseXml(string file)
{
using (Stream stream = File.OpenRead(file))
{
return ParseXml(stream);
}
}
Тогда вы можете разумно безопасно не тестировать этот метод - в конце концов, в нем нет существенной логики.
Теперь вы можете протестировать потоковый API, используя жестко закодированную строку в коде, затем вызывая Encoding.UTF8.GetBytes (xml)
и создавая ] MemoryStream
вокруг результирующего массива байтов ... но я обычно предпочитаю использовать отдельные файлы данных в моем тестовом проекте. Установите тип контента на «встроенный ресурс», а затем используйте Assembly.GetManifestResourceStream
для получения потока в тестовый файл.
Если это действительно обычный XML-файл, действительно ли вы хотите провести синтаксический анализ самостоятельно? Есть ли причина, по которой вы не хотите оставлять это на усмотрение фреймворка и выражать свой API в терминах DOM API, LINQ to XML или XmlReader
?
Все, что вам нужно сделать, это найти способ указать вашему классу, какой файл читать. Так что это немного зависит от того, как реализован ваш класс. Самым простым подходом будет что-то вроде этого:
public class ClassToTest : IClassToTest
{
public Result ParseXml(Stream xml)
{
// Parse xml and return result.
return ...;
}
}
[Test]
public void TestParseXml()
{
// Get xml stream to test from somewhere.
Stream xmlStream = ...;
// Call method to test.
var result = new ClassToTest().ParseXml(xmlStream);
// Assert results.
Assert.IsNotNull(result);
...
}
Идея состоит в том, что вы каким-то образом предоставляете тестируемому классу созданный вами xml-файл, для которого вы знаете, каких результатов синтаксического анализа ожидать.