Тест-драйв Нэнси Модули - PullRequest
11 голосов
/ 09 сентября 2011

Хорошо - я люблю NancyFx. Написание веб-приложения с несколькими строчками просто потрясающе!

Но как вы тестируете свои NancyModules на уровне устройства?

Обратите внимание, что мне известно о превосходной тестовой структуре , поставляемой с Nancy (Nancy.Testing на NuGet), которая дает отличные способы для тестирования всего (почти) стека приложений. Но теперь я имею в виду тест уровня unit , который я использую для уточнения содержимого моего NancyModule в стиле TDD.

Поскольку маршруты определены в конструкторе, часто вместе с лямда-выражением, которое составляет целое действие, он кажется немного «недоступным» из модульного теста. Но упустил ли я что-то очевидное о том, как проверить действия маршрута?

Например, как будет выглядеть модульный тест для этого простого приложения?

public class ResouceModule : NancyModule 
{
   private IProductRepository _productRepo;

   public ResourceModule(IProductRepository repo) : base("/products") 
   {
        Get["/list"] = parameters => { 
           return View["productList.cshtml", repo.GetAllProducts()];
        };
   }
}

Смотрите там - теперь я написал рабочий код перед тестом ... :) Есть какие-нибудь предложения о том, как начать тест?

Ответы [ 2 ]

12 голосов
/ 09 сентября 2011

Вы можете выполнить тестирование первого разработчика с помощью предоставляемых нами инструментов тестирования:

  • В своем тестовом запуске настройте загрузчик, который содержит только тестируемый вами модуль и любые поддельные объекты, которые вам нужны.
  • В вашем тесте выполните определенный маршрут (например, GET / list) - возможно, вам понадобится небольшой помощник для удаления некоторого повторяющегося кода.
  • Подтверждение того, что возвращается - у вас полный доступк объектам запроса и ответа (для заголовков, файлов cookie и т. д.), а также помощникам для тел HTML и, начиная с версии 1.8, помощникам для обработки JSON, XML и просто строковых ответов в теле.
  • Перейти к следующемуМаршрут, промыть и повторить.

Хорошо, значит, вы не просто тестируете модуль, но если вы посмотрите на стек вызовов, то до или после ничего особенного не происходитВы попали в свой маршрут, так что в моей книге это не так уж и важно :-) Если вы действительно хотите протестировать модуль в полной изоляции, тогда вы можете просто создать его самостоятельно и нажатьсоответственно отдельные маршруты (это просто словари в модуле).

4 голосов
/ 09 сентября 2011

В рамках Nancy.Testing вы можете использовать настраиваемый загрузчик для управления настройкой, включая настройку IoC. Это должно включить тестирование модуля без зависимостей более низкого уровня и включить TDD.

...