Тест-драйвы модулей Нэнси

Хорошо - я люблю 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.