logo

Шпијунирање или исмевање апстрактних часова

Апстрактне класе се називају класама декларисаним са кључном речи абстрацт која може, али не мора да укључује апстрактне методе. У Јави, апстрактне класе се не могу инстанцирати, али могу бити подкласе. Такође може имати статичка поља и статичке методе.

У овом одељку ћемо разговарати о исмевању или шпијунирању апстрактних класа. Анализираћемо неколико случајева тестирања апстрактних класа коришћењем неапстрактних метода.

За шпијунирање или исмевање апстрактних класа, морамо да додамо следеће Мавен зависности:

  • ЈУнит
  • Моцкито
  • ПоверМоцк

Све потребне зависности пројекта су дате у наставку:

 junit junit 4.12 test org.mockito mockito-all 1.10.19 test org.powermock powermock-module-junit4 1.7.4 test org.powermock powermock-api-mockito 1.7.0 test 

ПоверМоцк зависности су потребне само за тест у којем користимо ПоверМоцк.

Примери подругљиве апстрактне класе

1. Шпијунирање апстрактне класе користећи Моцкито.спи()

У овом примеру ћемо шпијунирати апстрактне класе користећи методу Моцкито.спи(). Метода Моцкито.спи() се користи за креирање шпијунске инстанце апстрактне класе.

ред у односу на колону

Корак 1: Креирајте апстрактну класу под називом Абстрацт1_цласс која садржи и апстрактне и неапстрактне методе.

Абстрацт1_цласс.јава

 public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } } 

Корак 2: Креирајте ЈУнит тест случај под називом Абстрацт1Тест . Садржи шпијунску инстанцу апстрактне класе.

иф елсе изјава у Јави

Абстрацт1Тест.јава

 import static org.junit.Assert.*; import org.junit.Test; import org.mockito.Mockito; import junit.framework.Assert; public class Abstract1Test { @Test public void testing_usingSpy() { Abstract1_class abstclas = Mockito.spy(Abstract1_class.class); String res = abstclas.methodUnderTest(); Assert.assertEquals('one', res); } } 

Излаз

Следећи излаз показује да је тест успешно покренут.

Шпијунирање или исмевање апстрактних часова

Недостатак коришћења методе Моцкито.спи() је то што ће позвати конструктор апстрактне класе током креирања шпијунске инстанце. У већини случајева, конструктор користи екстерне зависности које могу бити препрека извршењу нашег теста јединице. Ове спољне зависности су обично познате као препреке тестирања . То је разлог за коришћење методе Моцкито.моцк() за исмевање апстрактних класа.

2. Исмевање апстрактне класе коришћењем Моцкито.моцк()

У овом примеру ћемо се ругати апстрактним класама користећи методу Моцкито.моцк().

Обично се ругање користи за креирање клона или лажног објекта класе. Другим речима, чини класу празним због своје логике или алгоритама. Креирана лажна инстанца не садржи код (логику) унутар метода.

Корак 1: Креирајте апстрактну класу под називом Абстрацт_Цласс која садржи и апстрактне и неапстрактне методе.

Абстрацт_Цласс.јава

 public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); } 

Корак 2: Креирајте ЈУнит тест случај под називом АбстрацтТестЦласс за исмевање апстрактне класе.

АбстрацтТестЦласс.јава

пронађи мој иПхоне са андроида
 import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Test; public class AbstractTestClass { @Test public void test_AbstractClasses() { Abstract_Class ac = mock(Abstract_Class.class); when(ac.sayMock()).thenCallRealMethod(); when(ac.getName()).thenReturn('Jyotika'); assertEquals('Hii.. Jyotika!!', ac.sayMock()); } } 

У горњем коду, и је исмевана инстанца креирана коришћењем методе Моцкито.моцк().

Излаз

Следећи излаз показује да је тест успешно покренут користећи Моцкито.

питхон ос листдир
Шпијунирање или исмевање апстрактних часова

Горе наведени приступ није најбољи, али се може користити. Следећи приступ се препоручује јер користи ПоверМоцк и може имати контролу над приватним методама дефинисаним у апстрактним класама.

3. Исмевање апстрактне класе помоћу ПоверМоцк-а

У следећем примеру користићемо ПоверМоцкито.моцк() метод за исмевање апстрактних класа. Коришћење ПоверМоцк-а уместо Моцкито.моцк() је бољи приступ јер може имати контролу над приватним, као и статичким методама.

Корак 1: Креирајте апстрактну класу под називом Абстрацт_цласс који садржи и апстрактне и неапстрактне методе.

Абстрацт_цласс.јава

 public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } } 

Корак 2: Креирајте ЈУнит тест случај под називом АбстрацтТестЦласс за потребе тестирања.

АбстрацтТестЦласс.јава

 import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest( Abstract_Class.class) public class AbstractTestClass { @Test public void test_AbstractClassesusing_PowerMock() throws Exception { // given Abstract_Class ac = PowerMockito.mock(Abstract_Class.class); PowerMockito.doCallRealMethod().when(ac).sayMock(); PowerMockito.doReturn('Sharma').when(ac , 'getName'); //when String newstring = ac.sayMock(); //then assertEquals('Sharma13', newstring); System.out.println(newstring); } } 
Овде смо затражили од ПоверМоцк-а да затвори повратне вредности приватне методе како бисмо могли да тестирамо саиМоцк() метод без икаквих препрека тестирању. Моцкито сам не може да заустави ову методу, зато смо користили ПоверМоцк заједно са Моцкито.

Излаз

Следећи излаз показује да је тест успешно покренут користећи ПоверМоцк са Моцкито.

Шпијунирање или исмевање апстрактних часова