Тест-драйвы модулей Нэнси
Хорошо - я люблю NancyFx. Написание веб-приложения с помощью нескольких строк просто потрясающе!
Но как вы тестируете диск NancyModules на уровне единицы?
Обратите внимание, что я знаю о отличной тестовой схеме, поставляемой с Nancy (Nancy.Testing on NuGet), которая дает отличные способы тестирования весь (почти) стек приложений. Но теперь я имею в виду тест уровня единицы, который я использую, чтобы отразить содержимое моего NancyModule в режиме TDD.
Поскольку маршруты определены в конструкторе, часто вместе с выражением lamda, которые составляют все действие, он чувствует себя немного "недоступным" из unit test. Но я пропустил что-то очевидное о том, как проверить действия маршрута?
Например, как выглядел бы unit test для этого простого приложения?
public class ResouceModule : NancyModule
{
private IProductRepository _productRepo;
public ResourceModule(IProductRepository repo) : base("/products")
{
Get["/list"] = parameters => {
return View["productList.cshtml", repo.GetAllProducts()];
};
}
}
См. там - теперь я написал производственный код перед тестом...:) Любые предложения о том, как начать с теста?
Ответы
Ответ 1
Вы можете протестировать первый разработчик с помощью инструментов тестирования, которые мы предоставляем:
- В тестовом запуске настройте загрузчик, который содержит только те модули, которые вы тестируете, и любые любые поддельные объекты, которые вы хотите.
- В вашем тесте выполните конкретный маршрут (например, GET/list) - вам может понадобиться небольшой помощник для этого, чтобы удалить несколько повторяющихся кодов.
- Утверждение о том, что возвращается - у вас есть полный доступ к объектам запроса и ответа (для заголовков, файлов cookie и т.д.), а также помощники для тел HTML и, входя в 1.8, помощники для передачи JSON, XML и просто строковые ответы в тело.
- Переместитесь на следующий маршрут, промойте и повторите.
Итак, вы не просто проверяете модуль, но если вы посмотрите на стек вызовов, там не так много происходит до или после того, как вы нанесете свой маршрут, чтобы в моей книге не было такой большой сделки:-) Если вы действительно хотите протестировать модуль в полной изоляции, вы можете просто построить его самостоятельно и соответствующим образом вытолкнуть отдельные маршруты (это просто словари в модуле).
Ответ 2
В рамках Nancy.Testing вы можете использовать настраиваемый загрузчик для управления настройкой, включая настройку IoC. Это должно позволить тестировать модуль без зависимостей более низкого уровня и включать TDD.