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