Как к классу модульного теста, который читает XML-файл?

Я должен записать модульные тесты на класс, который читает XML-файл и анализирует, это довольно. Как я могу Дразнить чтение файла? Поскольку все содержание тестов должно быть против файла чтения.

Я использую nmock2 с nUnit.

Спасибо

6
задан Night Walker 13 June 2010 в 07:21
поделиться

2 ответа

Как предполагает 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 ?

7
ответ дан 10 December 2019 в 00:33
поделиться

Все, что вам нужно сделать, это найти способ указать вашему классу, какой файл читать. Так что это немного зависит от того, как реализован ваш класс. Самым простым подходом будет что-то вроде этого:

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-файл, для которого вы знаете, каких результатов синтаксического анализа ожидать.

3
ответ дан 10 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: