Какой слой я должен проверить в n-уровневом приложении

У меня есть 4 уровня приложения

1) Презентация (MVC)
2) Сервис (WCF)
3) Бизнес
4) Данные

Некоторые методы в моих сервисных слоях выполняют много других подпроцессов, например,

public OrderResponse PlaceOrder(OrderRequest request)
{
     if (CheckForSufficientStock(request.ItemId)) {
          ReserveStock(request.ItemId);
          ProcessPayment(request.CustomerPaymentDetails);
          RemoveStockFromInventory(request.ItemId);
          ArrangeForShipping(request.CustomerDetails);
          AddToOrderHistory(request);          
     }
}

Я начинаю учиться писать модульные тесты, и у меня есть несколько вопросов

1) Для какого слоя я должен написать модульные тесты? Пишу ли я свои модульные тесты для моих контроллеров в проекте MVC? Или я должен написать модульные тесты для каждого метода в моем слое обслуживания? Или оба?

2) Если мне нужно написать модульные тесты как для MVC, так и для сервисного уровня, то я могу сказать, что модульные тесты в моем проекте MVC будут тестировать PlaceOrder, а модульные тесты для тестирования моего сервисного уровня будут тестировать все подфункции, например: ReserveStock, ProcessPayment и т. Д.?

2 ответа

Решение

Как правило, вам нужны сквозные тесты, а также модульные тесты. Я не хочу объяснять основную концепцию, но я просто хочу перечислить некоторые лучшие практики из моего собственного опыта.

Для выполнения юнит-тестов, тестируйте только один слой за раз, высмеивая слой, на котором он основан. Например, когда вы тестируете бизнес-уровень, вы должны смоделировать уровень доступа к данным. Перемещая слой ниже, вы можете логически изолировать заглушку кода, которую хотите протестировать, не касаясь других слоев. С этим подходом не только легко работать, но также вы можете предотвратить слишком много проверок и получить ложные срабатывания. Вы также можете подготовить тестовое устройство, чтобы при каждом запуске теста вы dry run,

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

  • Для тестирования Javascipt в View Layer вы можете использовать Jasmine и т. Д.
  • Чтобы протестировать код C#, вы можете использовать MSTest, nUnit, xUnit
  • Чтобы смоделировать слой C#, вы можете использовать Moq
  • Для проведения сквозного тестирования вы можете использовать Selenium

Все мы знаем, что модульное тестирование означает тестирование по одному сценарию за раз. Вам придется написать модульные тесты для всех слоев. Например, в вашем случае, в MVC PlaceOrder метод, ваши тесты могут быть: CheckForSufficientStock входной параметр не нулевой, или Verify каждая функция называется TimesOnce, Точно так же, в других слоях, скажем

CheckForSufficientStock(int something)
{
...
}

То же самое будет следовать, если какая-либо функция вызывается снова, затем проверьте Times, верните значения.Mocking требуется пропустить фактические вызовы к другим слоям или функциям путем имитации возвращаемых значений, что необходимо для перехода к следующей строке кода. я нашел Moq Лучше всего использовать новичкам.

Другие вопросы по тегам