logo

Soyut Dersleri Gözetlemek veya Alay Etmek

Soyut sınıflar, soyut yöntemleri içerebilen veya içermeyebilen, soyut anahtar kelimeyle bildirilen sınıf olarak adlandırılır. Java'da soyut sınıflar oluşturulamaz ancak alt sınıflara ayrılabilirler. Ayrıca statik alanlara ve statik yöntemlere de sahip olabilir.

Bu bölümde soyut sınıfların alay edilmesini veya casusluk yapılmasını tartışacağız. Soyut sınıfların soyut olmayan yöntemler kullanılarak test edildiği birkaç durumu analiz edeceğiz.

Soyut sınıfları gözetlemek veya alay etmek için aşağıdaki Maven bağımlılıklarını eklememiz gerekir:

  • JBirim
  • Mockito
  • PowerMock

Projenin gerekli tüm bağımlılıkları aşağıda verilmiştir:

 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 

PowerMock bağımlılıkları yalnızca PowerMock'u kullandığımız test için gereklidir.

Alaycı Soyut Sınıf Örnekleri

1. Mockito.spy() kullanarak soyut sınıfı gözetlemek

Bu örnekte soyut sınıfları Mockito.spy() yöntemini kullanarak gözetleyeceğiz. Mockito.spy() yöntemi, soyut sınıfın casus örneğini oluşturmak için kullanılır.

Aşama 1: Hem soyut hem de soyut olmayan yöntemleri içeren Abstract1_class adında soyut bir sınıf oluşturun.

Özet1_class.java

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

Adım 2: Adlı bir JUnit test senaryosu oluşturun Özet1Test . Soyut sınıfın bir casus örneğini içerir.

Özet1Test.java

 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); } } 

Çıktı

Aşağıdaki çıktı testin başarıyla çalıştığını göstermektedir.

Soyut Dersleri Gözetlemek veya Alay Etmek

Mockito.spy() yöntemini kullanmanın dezavantajı, casus örneğinin oluşturulması sırasında soyut sınıf yapıcısını çağırmasıdır. Çoğu durumda yapıcı, birim test yürütmelerimize engel olabilecek dış bağımlılıklar kullanır. Bu dış bağımlılıklar genellikle şu şekilde bilinir: test engelleri . Soyut sınıflarla alay etmek için Mockito.mock() yönteminin kullanılmasının nedeni budur.

2. Mockito.mock() kullanarak soyut sınıfla alay etmek

Bu örnekte soyut sınıflarla Mockito.mock() yöntemini kullanarak alay edeceğiz.

Genellikle alay etme, sınıfın bir klonunu veya kukla nesnesini oluşturmak için kullanılır. Başka bir deyişle, bir sınıfı kendi mantığından veya algoritmalarından arındırır. Oluşturulan sahte örnek, yöntemlerin içinde kod (mantık) içermiyor.

Aşama 1: Hem soyut hem de soyut olmayan yöntemleri içeren Abstract_Class adında soyut bir sınıf oluşturun.

Soyut_Sınıf.java

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

Adım 2: Adlı bir JUnit test senaryosu oluşturun SoyutTest Sınıfı soyut sınıfla alay ettiğin için.

SoyutTestClass.java

 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()); } } 

Yukarıdaki kodda, Ve Mockito.mock() yöntemi kullanılarak oluşturulmuş sahte bir örnektir.

Çıktı

Aşağıdaki çıktı, testin Mockito kullanılarak başarıyla çalıştırıldığını gösterir.

Soyut Dersleri Gözetlemek veya Alay Etmek

Yukarıdaki yaklaşım en iyisi değildir, ancak kullanılabilir. Bir sonraki yaklaşım PowerMock kullandığı ve soyut sınıflarda tanımlanan özel yöntemler üzerinde kontrol sahibi olabileceği için önerilir.

3. PowerMock kullanarak soyut sınıfla alay etmek

Aşağıdaki örnekte soyut sınıflarla alay etmek için PowerMockito.mock() yöntemini kullanacağız. Mockito.mock() yerine PowerMock kullanmak daha iyi bir yaklaşımdır çünkü hem özel hem de statik yöntemler üzerinde kontrol sahibi olabilir.

Aşama 1: Adlı soyut bir sınıf oluşturun Soyut_sınıf hem soyut hem de soyut olmayan yöntemleri içerir.

Soyut_sınıf.java

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

Adım 2: Adlı bir JUnit test senaryosu oluşturun SoyutTest Sınıfı test amaçlı.

SoyutTestClass.java

 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); } } 
Burada sayMock() yöntemini herhangi bir test engeli olmadan test edebilmemiz için PowerMock'tan özel yöntemin dönüş değerlerini saplamasını istedik. Mockito tek başına bu yöntemi engelleyemez, bu yüzden Mockito ile birlikte PowerMock'u kullandık.

Çıktı

kaç tane görev imkansız film var

Aşağıdaki çıktı, testin Mockito ile PowerMock kullanılarak başarıyla çalıştırıldığını gösterir.

Soyut Dersleri Gözetlemek veya Alay Etmek