2017-11-26 9 views
1

을 테스트합니다.PowerMockito 내가 <code>MongoConnection.getClient()</code>에 <code>MongoClient</code> 인스턴스를 반환하는 정적 메서드와 게으른 싱글 <code>MongoConnection</code> 클래스가 MongoClient 싱글

응용 프로그램 전체에 MongoClient의 단일 인스턴스가 있기 때문에 (예 : MongoDB 설명서에 따라) 싱글 톤을 선택할 필요가 없습니다.

참고 : JUnit보다는 통합 테스트가 될 것이기 때문에 테스트에서 실제 DB에 연결하고 싶지는 않습니다. 단지 MongoClient이 예상 매개 변수로 초기화되었는지 확인하고 싶습니다. 나는 이것을 PockerMockito로 어떻게 할 수 있습니까?

답변

1

다음 예는 어떻게 모의 PowerMockito와 Mockito를 사용하는 방법을 보여줍니다 감사 당신의 MongoConnection.getMongoClient() :

  • Mockito의 v2.7.19
  • :

    @RunWith(PowerMockRunner.class) 
    @PrepareForTest({MongoConnection.class}) 
    public class ATest { 
    
        @Test 
        public void aTestWhichRequiresMockingMongoConnection() { 
         MongoClient mongoClient = Mockito.mock(MongoClient.class); 
         PowerMockito.mockStatic(MongoConnection.class); 
    
         Mockito.when(MongoConnection.getClient()).thenReturn(mongoClient); 
    
         // set up some expectations on the mocked MongoClient returned by MongoConnection  
         Mockito.when(mongoClient.getDatabase("aDatabaseName")).thenReturn(...); 
    
         // ... etc 
        } 
    } 
    

    이 클래스에 대한 확인

  • PowerMock v1.7.0
  • 주니어 니트 v4.12
  • 여담으로

이 :

(MongoDB를 문서에 따라) 응용 프로그램을 통해 MongoClient의 단일 인스턴스가있을 것이기 때문에 내가 싱글 톤 이상 선택의 여지가 없어.

... 귀하의 MongoClient을 정적으로 지정하지 않아도됩니다. getClient()을 정적이 아닌 메소드로 만들 수 있으며 MongoConnection이 싱글 톤인지 확인하십시오. 즉, 애플리케이션에 인스턴스가 하나만 존재해야합니다. 의존성 주입 솔루션 (예 : Spring, Guice)에는 의존성을 싱글 톤으로 구성 할 수 있도록하는 내장 된 지원 기능이 있습니다.