>

내가 작성중인 테스트 사례 :

public class AClassUnderTest {
    // This test class has a method call
    public Long methodUnderTest() {
         // Uses the FinalUtilityClass which contains static final method
         FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>);
         // I want to mock above call so that test case for my "methodUnderTest" passes
    }
}

마지막 수업이 하나 있습니다.

public final class FinalUtilityClass {
   /**
    * Method has 3 parameters
    */
   public static final MyBean myStaticFinalMethod(<3-parameters-here>) {
   }
}

이미 테스트 클래스에 아래 코드를 추가했습니다 :

@RunWith(PowerMockRunner.class)
@PrepareForTest({ FinalUtilityClass.class })

모의 테스트 케이스를 작성하고 싶습니다. myStaticFinalMethod() 의 전화를 조롱하고 싶습니다  예상 MyBean 를 얻을 수 있도록  테스트 코드를 전달하기 위해 추가 코드에서 사용할 수있는 instatnce입니다.

<3-parameters-here>  캘린더, 문자열, 문자열입니다.

내가 시도한:

1)

PowerMockito.mock(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());

2)

PowerMockito.mockStatic(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());

3)

PowerMockito.spy(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());

그러나 아무것도 나를 위해 일하지 않았다. static final 를 조롱하는 올바른 방법을 제안하십시오   final 의 방법  수업.

  • 답변 # 1

    정적 메소드에 대한 호출을 조롱하려면 다음 단계가 필요합니다.

    와이즈 비즈 사용  테스트 사례의 클래스 수준에서 주석을 추가합니다.

    와이즈 비즈 사용  테스트 사례의 클래스 수준에서 주석

    @RunWith(PowerMockRunner.class) 사용  이 클래스의 모든 메소드를 조롱하는 것

    문서화 된대로이 단계를 수행하면 테스트가 작동합니다. 그리고 OP가 PowerMock과 PowerMockito에 대해 혼란스러워하는 것처럼, 그것은 거의 같은 것입니다 :

    PowerMock 및 PowerMockito는동일한기술을 기반으로합니다. EasyMock 또는 Mockito와 함께 사용할 수있는 다른 "커넥터"가 있습니다. 예, 위의 예는 @PrepareForTest(ClassThatContainsStaticMethod.class) 라고 말합니다.  PowerMockito는 PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 를 가지고 있습니다.  방법도 있습니다. 그런 의미에서 :핵심사항 (예 : 주석이있는준비에 관한 사항)은 동일합니다. 예를 들어 여기를 참조하십시오 (PowerMockito를 소개하지만 링크 된 자습서에 "Intro to PowerMock"이라고 표시되어 있음).

    그리고 당신이 나를 믿지 않는 것 같습니다-이 예를보십시오 :

    PowerMock.mockStatic()
    
    

    이 테스트는 통과합니다. 아무것도 인쇄하지 않습니다. 따라서 최종 정적 메소드는 조롱됩니다.

    mockStatic()

관련 자료

  • 이전 HTML 5의 시맨틱 요소에 CSS 스타일을 추가하는 것이 옳습니까?
  • 다음 Kotlin에서 곱하기 변수를 사용하여 추상 클래스에서 상속