PowerMock bietet die Annotation "@ SuppressStaticInitializationFor", um den statischen Initialisierer zu deaktivieren.
Wenn die Klasse geladen wird, füllt der statische Initialisierer das Feld mit der Zeichenfolge "Wert".
Hier haben wir eine Richtermethode vorbereitet, die true zurückgibt, wenn das Feld auf "value" gesetzt ist, andernfalls false.
SampleEm.java
public class SampleEm {
private static String field = null;
static {
field = "value";
}
public boolean judge() {
return "value".equals(field);
}
}
Um PowerMock mit JUnit zu verwenden, geben Sie PowerMockRunner für "@ RunWith" an.
Geben Sie für "@ PrepareForTest" die zu verspottende Klasse an.
Ich gebe auch eine Klasse an, die in "@ SuppressStaticInitializationFor" verspottet werden soll, aber beachten Sie, dass es sich nicht um "@SuppressStaticInitializationFor (SampleEm.class)" handelt.
@RunWith(PowerMockRunner.class)
@PrepareForTest(SampleEm.class)
@SuppressStaticInitializationFor("jp.co.sample_powermock.staticinitializer.SampleEm")
public class SampleEmTest {
@Test
public void test() throws Exception {
//Lauf
SampleEm em = new SampleEm();
boolean result = em.judge();
//Überprüfen Sie das Ergebnis
assertFalse(result);
}
}
Wenn ich den Test ausführe, ist diese JUnit erfolgreich, da das Feld aufgrund der Deaktivierung des statischen Initialisierers nicht auf "Wert" gesetzt ist.