PowerMock은 단위 테스트에서 모의 객체를 생성하는 데 사용되는 오픈 소스 Java 프레임워크입니다. 기능을 향상시키기 위해 EasyMock 및 Mockito와 같은 다른 모의 프레임워크를 확장합니다. PowerMock 프레임워크는 사용자 정의 클래스 로더와 바이트코드 조작 기술을 사용하여 정적 메소드, 최종 클래스, 최종 메소드, 개인 메소드, 생성자의 조롱 및 정적 초기화 프로그램 제거를 가능하게 합니다. PowerMock의 주요 목표는 기존 API를 몇 가지 메서드와 주석으로 확장하여 단위 테스트를 매우 쉽게 만드는 추가 기능을 제공하는 것입니다.
PowerMock 프레임워크는 다음과 같은 클래스를 제공합니다. PowerMockito 모의 객체를 생성하고 검증 및 기대를 시작하는 데 사용됩니다. PowerMockito는 Java 리플렉션 API로 작업하는 기능을 제공합니다.
예제를 통해 PowerMock의 개념을 이해해 봅시다.
Mockito를 사용한 PowerMock의 예
여기서는 Mockito 및 JUnit 프레임워크를 사용하여 PowerMock의 예를 만들겠습니다. PowerMock을 사용하여 예제를 생성하려면 다음 단계를 거쳐야 합니다.
1 단계: pom.xml 파일에 다음 PowerMock 종속성을 추가합니다.
자바에서 별도의 문자열
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
2 단계: PowerMock 주석 적용
Mockito와 함께 PowerMock을 사용하려면 다음을 적용해야 합니다. 둘 테스트의 주석:
@RunWith(PowerMockRunner.class): 이전 예제에서 사용한 것과 동일합니다. 유일한 차이점은 이전 예에서는 MockitoUnitRunner.class를 사용했지만 이제 테스트에서 PowerMockito API를 활성화하기 위해 PowerMockRunner.class를 사용한다는 것입니다.
@PrepareForTest: PowerMock에게 테스트를 위해 일부 클래스를 준비하라고 지시합니다. 이는 테스트 클래스와 개별 테스트 방법 모두에 적용될 수 있습니다. 여기에는 조롱할 수 있는 최종, 정적, 비공개 또는 기본 메서드가 있는 클래스가 포함됩니다.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
참고: 위의 두 단계는 PowerMock을 사용하여 생성할 모든 예제에 필수입니다.
Mockito 및 JUnit 프레임워크를 사용하는 PowerMock의 다음 예가 있습니다.
1. 조롱 공전 행동 양식
다음 예에서는 공전 행동 양식.
1 단계: 다음을 포함하는 클래스를 만듭니다. 공전 방법. 우리는 이름을 가진 클래스를 만들었습니다. 공익사업.
자바를 두 배로 늘리는 정수
유틸리티.java
저장
public class Utility { public static String staticMethod(String call) { return call; } }
2 단계: JUnit 테스트 케이스 생성 파워모크_테스트, 테스트 목적으로.
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); } }
산출
다음 출력은 테스트가 성공적으로 실행되고 있음을 보여줍니다.
또한 다음을 사용하여 정적 메서드가 호출되는지 확인할 수 있습니다. 검증정적() 아래와 같이 PowerMockito의 메서드를 사용합니다.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. 조롱 사적인 행동 양식
다음 예에서는 모의 객체를 생성합니다. 사적인 행동 양식.
1 단계: 개인 메서드가 포함된 클래스를 만듭니다. 우리는 이름으로 클래스를 만들었습니다. 공익사업 그리고 정의했다 사적인 메소드와 공개 메소드(프라이빗 메소드의 객체를 반환함).
유틸리티.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
2 단계: JUnit 테스트 케이스 생성 PowerMock_test 테스트 목적으로.
배쉬 문자열 길이
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())); } }
산출
다음 출력은 테스트가 성공적으로 실행되고 있음을 보여줍니다.
3. 조롱 결정적인 행동 양식
다음 예에서는 결정적인 행동 양식.
1 단계: 다음을 포함하는 클래스를 만듭니다. 결정적인 방법. Utility라는 이름의 클래스를 만들고 이름이 최종 메서드인 정의를 정의했습니다. finalMethod.
배열 길이 자바
유틸리티.java
public class Utility { public final String finalMethod(String message) { return message; } }
2 단계: JUnit 테스트 케이스 생성 Powermock_test 테스트 목적으로.
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); } }
산출
다음 출력은 테스트가 성공적으로 실행되고 있음을 보여줍니다.