mockito 코어 버전 : 1.10.19mockStatic이 예상대로 작동하지 않는 이유는 무엇입니까?
powermock 버전 : 1.6.6
는 좀 정적 메서드를 조롱하려고 노력하지만, 출력은 나를 혼란. 다음은 내 코드입니다 :
이class ClassWithStatics {
public static int getNextInt() {
return getInt() + 1;
}
public static int getInt() {
return 1;
}
public static long getTime() {
return System.currentTimeMillis();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassWithStatics.class, System.class})
public class StubJustOneStatic {
@Test
public void test() {
PowerMockito.mockStatic(ClassWithStatics.class);
Mockito.when(ClassWithStatics.getInt()).thenReturn(0);
PowerMockito.mockStatic(System.class);
Mockito.when(System.currentTimeMillis()).thenReturn(12345L);
System.out.println("Next Int: " + ClassWithStatics.getNextInt());
System.out.println("Int: " + ClassWithStatics.getInt());
System.out.println("Time:" + ClassWithStatics.getTime());
}
}
출력은
Next Int: 0
Int: 0
Time:0
하지만 난 다음 코드를 사용하는 경우, ClassWithStatics.getTime()
인쇄는 내가 원하는 정확히.
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassWithStatics.class, System.class})
public class StubJustOneStatic {
@Test
public void test() {
// PowerMockito.mockStatic(ClassWithStatics.class);
// Mockito.when(ClassWithStatics.getInt()).thenReturn(0);
PowerMockito.mockStatic(System.class);
Mockito.when(System.currentTimeMillis()).thenReturn(12345L);
// System.out.println("Next Int: " + ClassWithStatics.getNextInt());
// System.out.println("Int: " + ClassWithStatics.getInt());
System.out.println("Time:" + ClassWithStatics.getTime());
}
}
고마워요.
그리고 평범한 호언 장담 : 정적 방법을 사용하면 코드를 테스트하기가 어렵습니다. PowerMock으로 바꾸는 것은 잘못된 대답입니다. 시험용 코드를 대신 작성하십시오 ;-) – GhostCat