Какой слой я должен проверить в 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
Лучше всего использовать новичкам.