Как мне выполнить модульное тестирование «хранилища», которое возвращает XML? - PullRequest
1 голос
/ 10 мая 2011

Для проекта у меня есть серия псевдорепозиториев, которые создают XML (они не являются настоящими репозиториями, но выполняют ту же роль, поэтому я использовал эту номенклатуру), вызывая некоторые XML-возвращающие хранимые процессы.Для целей моего проекта у меня также есть «Mappers» (опять же, они не true mappers ...), которые принимают XML в качестве входных данных и используют Linq для перевода необработанного XML в DTO.

Поскольку у меня есть маппер, мне кажется, что «хранилище» не должно проверять возвращаемое значение (так как это работа маппера; хранилище заботится только о том, чтобы получить какой-то XML обратно, вне зависимости от того, является ли XMLданные верны).Однако это приводит к тестам, которые буквально просто проверяют, что возвращаемое значение из «хранилища» не равно нулю.

По сути, каждый репозиторий реализует интерфейс, который имеет единственный метод с именем GetXml, который возвращает документ XML.Реальная реализация выполняет вызов базы данных, но для теста у меня есть очень простой фиктивный класс, который просто возвращает пустой XML-документ.В конце концов мне нужно будет создать настоящий XML-файл, используя некоторые жестко запрограммированные значения для макета, но разве это нормально, что тесты репозитория по сути представляют собой одну строку: Assert.IsNotNull(repository.GetXml(), "Xml response was null");

Это то, чтоследует даже проверить, или есть лучший способ проверить это, не наступая на пальцы маппера?Я предполагаю, что с точки зрения дизайна я мог бы полностью удалить сопоставители и просто сделать так, чтобы хранилище выполняло сопоставление (или делало сопоставление внутренним по отношению к хранилищу).Я не делаю TDD, так как на самом деле у меня написан код, но я хочу создавать тесты, чтобы их было проще тестировать, и чтобы я мог показать своим коллегам преимущества тестов (в настоящее время мы не используем любой тип автоматизированного тестирования).

Я думаю, что я действительно спрашиваю об этом: нормально ли писать тест, который только выражает намерение разработчика кому-то, ктоможет использовать код, не заботясь о возвращенном значении?Прямо сейчас это то, что делают эти тесты: они говорят, в коде: «Я должен быть в состоянии создать класс XmlXXXRepository, который реализует интерфейс с именем IXmlRepository, принимает долго с именем quoteID при создании и имеет метод, называемыйGetXml(), который возвращает объект XmlDocument "и все.

1 Ответ

3 голосов
/ 10 мая 2011

Я обычно пишу два типа тестов для моих методов XML.Сначала я пишу модульные тесты для логики, связанной с созданием результата XML.Обычно это вынуждает вас извлечь свою логику в другой класс, чтобы логика и создание XML были разделены.Это обычно означает, что логика заканчивается заполнением DTO, и XML создается из получающегося DTO с использованием некоторого класса построителя или простого XML-сериализатора.

Как только все модульные тесты работают, я начинаю создавать интеграционные тестыс известным набором входов и известных выходов XML.В зависимости от результата XML это может быть либо очень простое сравнение текста, либо серия запросов XPath для проверки структуры и значений в XML.

Oh и XML-утверждений в MBUnitявляются потрясающими для такого рода испытаний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...