HOWTO · Java
Mockito를 사용하여 Java의 정적 메소드 모의하기
이 튜토리얼은 Java에서 mockito를 사용하여 정적 메서드를 조롱하는 방법을 보여줍니다.
이 페이지의 내용
이 튜토리얼은 mockito를 사용하여 Java의 정적 메서드를 조롱하는 방법을 보여줍니다.
Java의 모의 정적 메서드
Mocking Static Methods는 Java에서 단위 테스트를 수행할 때 필요합니다. Mockito 3.4.0 버전 이전에는 PowerMock을 사용하여 정적 및 개인 메서드를 조롱해야 합니다.
Mockito 3.4.0을 사용하면 정적 메서드를 직접 조롱할 수 있습니다. 이 자습서는 Java에서 mockito를 사용하여 정적 메서드를 모의하는 방법을 보여줍니다.
Maven 종속성 추가
mockito를 시작하기 전에 시스템에 추가해야 합니다. 정적 메서드를 모의하려면 mockito 인라인 모의에서 인라인 모의 만들기가 필요합니다.
mockito-inline은 정적 메서드에 대한 조롱 기능을 제공하는 커뮤니티 피드백과 이전에는 조롱할 수 없었던 최종 클래스를 위해 별도로 개발되었습니다. 다음은 mockito 인라인 조롱에 대한 maven 종속성입니다.
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.6.1</version>
<scope>test</scope>
</dependency>
maven 시스템의 pom.xml에 이 종속성을 추가하면 됩니다.
Mockito 인라인 목킹을 사용하는 다양한 코드 예제
먼저 모의 정적 메서드에 적용할 수 있는 시스템을 결정해 보겠습니다. 인수가 있는 메서드와 인수가 없는 메서드가 있는 간단한 클래스를 만들어 보겠습니다. 예 참조:
package delftstack;
import java.util.stream.IntStream;
class Mock_Static_Method {
public static String get_Value() {
return "delftstack";
}
public static int addition(int... args) {
return IntStream.of(args).sum();
}
}
위의 코드에는 두 가지 메서드가 있는 간단한 클래스가 포함되어 있습니다.
- 첫 번째 방법은
delftstack값을 반환하고 인수를 사용하지 않습니다. - 두 번째 방법은 인수를 받아 합계를 반환합니다.
모의 정적 클래스
정적 메서드를 조롱하기 전에 정적 클래스를 조롱해야 합니다. 다음은 Java에서 mockito를 사용하여 정적 클래스를 조롱하는 방법에 대한 코드 예제입니다.
try (MockedStatic Mock_Static_Class = mockStatic(AppStatic.class)) {
// Here, we can record mock expectations, test code, and verify mock
}
위 코드에서 MockedStatic은 정적 메서드 유형의 범위가 지정되고 활성 모의 객체를 나타냅니다. mockStatic은 정적 메서드 호출을 확인하는 데 사용됩니다.
인수가 없는 모의 정적 방법
인수를 받지 않고 delftstack 값을 반환하는 첫 번째 메서드인 get_Value()를 조롱해 봅시다. get_Value() 메서드를 조롱하고 delftstack1 값을 반환하려고 합니다. 예를 참조하십시오.
@Test
public void Testing_Get_Value() {
// Outside the scope
assertEquals("delftstack", Mock_Static_Method.get_Value());
try (MockedStatic Mock_Static = mockStatic(Mock_Static_Method.class)) {
Mock_Static.when(Mock_Static_Method::get_Value).thenReturn("delftstack1");
// Inside the scope
assertEquals("delftstack1", Mock_Static_Method.get_Value());
Mock_Static.verify(Mock_Static_Method::get_Value);
}
// Outside the scope
assertEquals("delftstack", Mock_Static_Method.get_Value());
}
위의 코드는 정적 메서드 get_Value(),를 모의하고 이제 범위 외부에서 메서드는 delftstack을 반환하고 범위 내에서 delftstack1을 반환합니다.
인수가 있는 모의 정적 방법
인수가 있는 정적 메서드를 조롱하는 것과 인수가 없는 정적 메서드를 조롱하는 것에는 큰 차이가 없습니다.
인수를 사용하여 정적 메서드를 모의하기 위해 예상 및 람다 식에서 유연한 인수 일치를 사용하여 메서드를 호출할 수 있습니다. 예를 참조하십시오:
@Test
public void Testing_Addition() {
assertEquals(3, Mock_Static_Method.addition(1, 2));
try (MockedStatic Mock_Static = mockStatic(Mock_Static_Method.class)) {
Mock_Static.when(() -> Mock_Static_Method.addition(anyInt(), anyInt())).thenReturn(10);
assertEquals(10, Mock_Static_Method.addition(1, 2));
Mock_Static.verify(() -> ClassWithStaticMethod.addition(1, 2));
}
assertEquals(3, Mock_Static_Method.addition(1, 2));
}
위의 코드는 위 코드의 인수를 사용하여 정적 메서드를 조롱합니다.
위의 코드는 주어진 인수의 합계를 계산하는 데 사용되는 IntStream.of(args).sum()을 조롱하므로 주어진 인수의 합계를 반환합니다. 범위 밖에서 메서드는 합계 3을 반환하고 범위 내에서 값 10을 반환해야 합니다.