Spring

중첩 된 정적 클래스로 인터페이스 모킹

기록만이살길 2021. 3. 16. 15:03
반응형

중첩 된 정적 클래스로 인터페이스 모킹

1. 질문(문제점):

변경할 수없는 인터페이스와 구현이 있습니다. 인터페이스는 다음과 같습니다.

public Interface IHello{
// ... some method declarations
     public static class IoH{
          static IHello hello = new IHello.IoH.HelloImpl();
          public IoH(){}
          
          public static IHello getHello(){
              return hello;
          }

          private static class HelloImpl implements IHello{ 
              // .... constructor and methods....
          }
     }
}

또한 IHello 인터페이스 의 기능을 재정의하고 다른 작업을 수행하지 않는 IHello 인터페이스 인 Hello ( 최종 클래스 ) 의 구현도 제공 됩니다. 즉, 인터페이스의 중첩 된 부분을 사용하지 않습니다.

이제 코드에서 다음과 같이 사용됩니다.

String string = IHello.IoH.getHello().getInfo(); // getInfo()  is method of interface

나는 단위 테스트 중이며 IHello 인터페이스 MockImplementation 과 일부 빈을 주입 하거나 Mockito를 사용 하여이 IHello.IoH.getHello () 또는 IHello.IoH.getHello (). getInfo ()조롱 하고 싶습니다.

어떻게 할 수 있습니까?

2. 해결방안:

Mockito 버전 3.4.0을 사용하고 MockedStatic을 사용했습니다.

MockedStatic<IHello.IoH> mocked = Mockito.mockStatic(IHello.IoH.class);
mocked.when(IHello.IoH::getHello).thenReturn(new MockHello());

MockHello는 인터페이스의 기능을 재정의하는 조롱 아이디어의 간단한 구현입니다.

65664712
반응형