Сврха теста јединице је да идентификује грешке у апликацији што је пре могуће. Иако вас неколико канала може довести до истог циља, требало би да тежите да користите најефикаснији пут.
ЈУнит тестни пакет може имати неколико тестних класа којима су потребни исти подаци, али не можете поново користити тестне податке. У претходним верзијама ЈУнит-а, добар приступ је био креирање услужног метода, а затим позивање тог метода сваки пут када тестној класи буду потребни њени подаци.
ЈУнит 5 пружа ефикаснији приступ овом проблему: ињекција зависности (ДИ).
Шта је ињекција зависности?
ДИ је образац дизајна где објекат снабдева зависности другог објекта. Када правите Јава апликацију, можда имате класу која зависи од објекта који друга класа креира да би извршила своју функцију.
Пре убацивања зависности, да бисте користили објекат из друге класе, морали бисте да креирате нову инстанцу тог објекта унутар класе која зависи од њега. Дакле, ако имате неколико класа које зависе од истог објекта, морали бисте да креирате неколико његових инстанци унутар зависних класа.
ДИ вам омогућава да користите објекат у зависној класи, без креирања његове нове инстанце у тој класи.
Ињекција зависности у ЈУнит 5
ЈУнит 5 вам омогућава да убаците зависности и у методе тестирања и у конструкторе. Ово је значајно јер претходне верзије оквира нису дозвољавале да методе тестирања или конструктори имају параметре.
ЈУнит 5 вам омогућава да унесете онолико параметара колико желите. Једина квака је у томе што ПараметерРесолвер АПИ мора бити у стању да разреши сваки параметар у време извршавања. ЈУнит тренутно има три уграђена разрешивача параметара које користи аутоматски. Да бисте користили било који други разрешивач, требало би да га експлицитно региструјете коришћењем напомене @ЕктендВитх.
Убацивање зависности у ЈУнит
Овај пример програма користи један од ЈУнит-ових уграђених параметара (ТестИнфоПараметерРесолвер), да покаже како можете да убаците зависност у ЈУнит 5 тест. ТестИнфоПараметерРесолвер решава објекте који припадају интерфејсу ТестИнфо. Дакле, ЈУнит 5 ће обезбедити инстанцу интерфејса ТестИнфо било ком методу или конструктору који га користи.
увозстатичне орг.јунит.јупитер.апи. Тврдње.*;
увоз орг.јунит.јупитер.апи. Показати име;
увоз орг.јунит.јупитер.апи. Тест;
увоз орг.јунит.јупитер.апи. ТестИнфо;класаИнфоТестИнтерфацеТест{
// Убацивање објекта тестИнфо у конструктор ИнфоТестИнтерфацеТест
ИнфоТестИнтерфацеТест (ТестИнфо тестИнфо) {
ассертЕкуалс("ИнфоТестИнтерфацеТест", тестИнфо.гетДисплаиНаме());
}// Убацивање тестИнфо објекта у методе
@Тест
празнинатестМетходНаме(ТестИнфо тестИнфо){
ассертЕкуалс("тестМетходНаме (ТестИнфо)", тестИнфо.гетДисплаиНаме());
}
@Тест
@Показати име(„метод који користи @Показати име Анотација")
празнинатестМетходНамеТво(ТестИнфо тестИнфо){
ассертЕкуалс("метод који користи @Показати име аннотатион", тестИнфо.гетДисплаиНаме());
}
}
ЈУнит тест изнад показује како убацити објекат у конструктор и две методе. Тхе ЈУнит ТестИнфо интерфејс има четири методе које можете користити са својим објектом.
Метод гетДисплаиНаме() је најкориснији. Враћа приказано име тренутног тестног метода или конструктора. Подразумевано, ово име је засновано на класи. Али ако користите напомену @ДисплаиНаме, метода гетДисплаиНаме() ће уместо тога вратити тај текст.
Тест класа изнад генерише следећи извештај о тестирању:
Користите ДИ у методама @пре и @после
Постоје четири друга типа ЈУнит анотираних метода које подржавају зависности. Ово су напомене @БефореАлл, @БефореЕацх, @АфтерАлл и @АфтерЕацх. Као и @Тест метод, све што треба да урадите је да проследите објекат било којој од метода пре или после као параметар, и спремни сте.
Напомене @Бефоре и @Афтер су важне, јер вам такође помажу да развијете ефикаснији код за тестирање. Могућност убризгавања зависности у ове методе додатно ће побољшати ваш тестни код.