2017-09-15 1 views
-4

현재 테스트를 위해 새 DateTime 객체가 만들어 질 때마다이를 가로 채고 상수 (미리 결정된) DateTime 객체를 만들 수 있도록 DateTime 객체를 모의하고 있습니다. 나는 LocalDateTime 객체와 DateTime 개체를 조롱하고, 지금조디 타임 DateTime을 모의토로 조롱하는 법

DateTime start = new LocalDateTime().toDateTime().minusHours(1)

DateTime end = new LocalDateTime().toDateTime()

,하지만 어떻게 확실하지 않다 : 내 실제 방법에서

는,이 같은 DateTime 개체를 만드는 오전 다음을 수행 :

@Mock 
DateTime dt; 

@Mock 
LocalDateTime ldt; 

@Test 
public void test() { 
    when(new DateTime()).thenReturn(????); // Stuck here. 
    when(new LocalDateTime().toDateTime()).thenReturn(dt); 
} 

어떤 도움을 주실 수 있습니다. 감사!

답변

0

정적 메서드 호출 (또는 생성자 호출)을 Mockito로 모의 할 수 없습니다. Powermock과 함께 할 수는 있지만 이것은 잘못된 접근 일 것입니다.

조다 타임의 현재 시간 개념을 제어하려면 DateTimeUtils.setCurrentMillis* methods을 사용하는 것이 좋습니다. 예를 들어 시간을 고정시킬 수 있습니다. 이것의 단점은 그것이 글로벌 상태를 돌연변이시키고 있다는 것입니다. 따라서 예기치 않은 결과가 발생할 수 있습니다. 테스트 후에도 현재 millis 제공 업체를 재설정해야합니다. 당신은 당신이 DateTime, 예를 들어, 인스턴스를 만들 수 있습니다 테스트중인 클래스에 뭔가를 주입 있도록

그러나, 더 나은 솔루션은 의존성 주입을 사용하는 것입니다 Supplier<DateTime>이므로 new DateTime()이 아닌 비 정적 인 supplier.get()을 호출합니다.

관련 문제