CodeGym/Java Course/모듈 3/Mockito 작업에 대한 인기 있는 시나리오

Mockito 작업에 대한 인기 있는 시나리오

사용 가능

6.1 정적 메서드 mockStatic() 조롱

그리고 한 가지 더 중요한 점은 정적 메서드의 조롱 및 검증입니다. "그게 뭐가 문제야?" 당신이 묻는다. 예, 정적이지만 메서드는 동일합니다. 그리고 당신은 틀릴 것입니다.

목 객체에 대해 배우기 시작한 곳을 기억하십니까? 이러한 객체는 DynamicProxy. 그리고 정적 메서드는 어떤 개체에도 바인딩되지 DynamicProxy않으며 . 그게 다야.

그러나 Mockito의 제작자도 여기에서 피할 수 있었습니다. 그들은 자체 클래스 로더를 작성했고 그 도움으로 즉석에서 클래스를 교체할 수 있었습니다. 크고 어려운 일이지만 그들은 여전히 ​​해냈습니다.

다음에 추가 라이브러리를 추가해야 합니다 pom.xml.

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

정적 메서드를 조롱해야 하는 경우 작동하는 방법은 다음과 같습니다.

1 특별한 모의 클래스 객체를 만듭니다.

MockedStatic<ClassName>managerObject = Mockito.mockStatic(ClassName.class);

2 이 개체에 작업 규칙을 추가합니다.

규칙의 이 목적에 대해 다른 방식으로 집착할 필요가 있습니다.

managerObject.when(ClassName::method name).thenReturn(result);

3 개체가 즉시 삭제되고 Mockito가 관련 규칙을 지울 수 있도록 이 개체의 사용을 래핑해야try-with-resources 합니다 .

예:

@Test
void givenStaticMethodWithNoArgs () {
    try (MockedStatic< StaticUtils> utilities =  Mockito.mockStatic( StaticUtils.class)) {
        // add rule
         utilities.when(StaticUtils::name).thenReturn("Hello");

        // check if the rule works
        assertEquals("Hello", StaticUtils.name());
    }
}

@Mock주석 및 처럼 아름답지는 않지만 @Spy매우 실용적입니다. 테스트 중인 메서드 내부에서 사용되는 간단한 정적 메서드를 조롱하는 것이 불가능할 때 테스트를 작성하는 것은 매우 어려웠습니다.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다