Тест-драйв модулей Nancy

Хорошо - я люблю 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()];
        };
   }
}

Видишь ли, теперь я написал производственный код перед тестом... :) Есть предложения, как начать с теста?


person Marcus Hammarberg    schedule 09.09.2011    source источник


Ответы (2)


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

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

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

person Steven Robbins    schedule 09.09.2011
comment
Спасибо Стивен - именно то, что я искал - person Marcus Hammarberg; 09.09.2011

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

person Christian Horsdal    schedule 09.09.2011