PowerMock, birim testinde sahte nesne oluşturmak için kullanılan açık kaynaklı bir Java çerçevesidir. Yetenekleri geliştirmek için EasyMock ve Mockito gibi diğer alaycı çerçeveleri genişletir. PowerMock çerçevesi, statik yöntemlerin, son sınıfların, son yöntemlerin, özel yöntemlerin, yapıcının ve statik başlatıcıların kaldırılmasının taklit edilmesini sağlamak için özel bir sınıf yükleyici ve bayt kodu manipülasyon teknikleri kullanır. PowerMock'un temel amacı, mevcut API'leri bazı yöntemler ve açıklamalarla genişleterek birim testini oldukça kolaylaştıran ekstra özellikler sağlamaktır.
PowerMock çerçevesi adı verilen bir sınıf sağlar GüçMockito sahte nesneler oluşturmak için kullanılır ve doğrulamayı ve beklentiyi başlatır. PowerMockito, Java yansıma API'si ile çalışma işlevselliğini sağlar.
PowerMock kavramını bir örnek yardımıyla anlayalım.
Mockito ile PowerMock Örneği
Burada Mockito ve JUnit çerçeveleri ile bir PowerMock örneği oluşturacağız. PowerMock kullanarak örnek oluşturmak için aşağıdaki adımları uygulamamız gerekiyor.
Aşama 1: Aşağıdaki PowerMock bağımlılıklarını pom.xml dosyasına ekleyin.
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
Adım 2: PowerMock ek açıklamalarını uygulama
PowerMock'u Mockito ile kullanmak için aşağıdakileri uygulamamız gerekir iki testteki açıklamalar:
@RunWith(PowerMockRunner.class): Daha önceki örneklerimizde kullandığımızın aynısı. Tek fark, önceki örnekte MockitoUnitRunner.class'ı kullanmıştık, şimdi testte PowerMockito API'lerini etkinleştirmek için PowerMockRunner.class'ı kullanacağız.
java'da güncel bir tarih nasıl alınır
@PrepareForTest: PowerMock'a bazı sınıfları test için hazırlamasını söyler. Hem test sınıflarına hem de bireysel test yöntemlerine uygulanabilir. Alay edilebilecek final, statik, özel veya yerel yöntemlere sahip sınıfları içerir.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
Not: Yukarıdaki iki adım, PowerMock kullanarak oluşturacağımız tüm örnekler için zorunludur.
Mockito ve JUnit çerçeveleriyle PowerMock'un aşağıdaki örnekleri vardır.
1. Alay etmek statik yöntemler
Aşağıdaki örnekte, alay edeceğiz statik yöntemler.
Aşama 1: içeren bir sınıf oluşturun. statik yöntem. isminde bir sınıf oluşturduk. Yarar.
Utility.java
public class Utility { public static String staticMethod(String call) { return call; } }
Adım 2: adında bir JUnit test senaryosu oluşturun. Powermock_testi, test amaçlı.
Powermock_test.java
import static junit.framework.Assert.assertEquals; 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(Utility.class) public class Powermock_test { @Test public void TestStaticMethod_WithPowerMockito() { String call = ' Hi there, I'm using PowerMock with Mockito '; String callexpectation = ' Call Expectation for you. '; PowerMockito.mockStatic(Utility.class); PowerMockito.when(Utility.staticMethod(call)).thenReturn(callexpectation); String actualcall = Utility.staticMethod(call); assertEquals(callexpectation, actualcall); } }
Çıktı
Aşağıdaki çıktı testin başarıyla çalıştığını göstermektedir.
Statik yöntemin çağrılıp çağrılmadığını da aşağıdaki komutu kullanarak doğrulayabiliriz: doğrulamaStatik() Aşağıda gösterildiği gibi PowerMockito yöntemini kullanın.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. Alay etmek özel yöntemler
Aşağıdaki örnekte bir maket oluşturacağız. özel yöntemler.
js'ye tıklayın
Aşama 1: Özel bir yöntem içeren bir sınıf oluşturun. ismiyle bir sınıf oluşturduk. Yarar ve tanımlandı özel yöntem ve genel yöntem (özel yöntemin nesnesini döndüren).
Utility.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
Adım 2: Adlı bir JUnit test senaryosu oluşturun PowerMock_testi test amaçlı.
Powermock_test.java
import static junit.framework.Assert.assertEquals; 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(Utility.class) public class Powermock_test { @Test public void TestPrivateMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; String expectedmessage = ' Using with EasyMock '; Utility mock =PowerMockito.spy(new Utility()); PowerMockito.doReturn(expectedmessage).when(mock, 'privateMethod', message); String actualmessage = mock.callPrivateMethod(message); assertEquals(expectedmessage, actualmessage); System.out.println(PowerMockito.verifyPrivate(getClass())); } }
Çıktı
Aşağıdaki çıktı testin başarıyla çalıştığını göstermektedir.
3. Alay etmek son yöntemler
Aşağıdaki örnekte, alay edeceğiz son yöntemler.
Aşama 1: içeren bir sınıf oluşturun. son yöntem. Utility adında bir sınıf oluşturduk ve adında son bir yöntem tanımladık. finalMethod.
piton program listesi
Utility.java
public class Utility { public final String finalMethod(String message) { return message; } }
Adım 2: Adlı bir JUnit test senaryosu oluşturun Powermock_testi test amaçlı.
Powermock_test.java
import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestFinalMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; Utility uti = PowerMockito.mock(Utility.class); PowerMockito.whenNew(Utility.class).withNoArguments().thenReturn(uti); Utility uti2 = new Utility(); PowerMockito.verifyNew(Utility.class).withNoArguments(); PowerMockito.when(uti2.finalMethod(message)).thenReturn(message); String message2 = uti2.finalMethod(message); Mockito.verify(uti2).finalMethod(message); assertEquals(message, message2); } }
Çıktı
Aşağıdaki çıktı testin başarıyla çalıştığını göstermektedir.