Mit PowerMock können Sie den Rückgabewert einer statischen Methode auf einen beliebigen Wert setzen oder eine Ausnahme zurückgeben.
Hier wird angenommen, dass die statische Methode der Utility-Klasse (Mocking-Klasse), die von der UseUtility-Klasse (Testzielklasse) aufgerufen wird, verspottet wird.
Dies ist die zu testende Klasse, die von JUnit aufgerufen wird.
Ich rufe die statische Methode der Utility-Klasse intern auf und möchte diese Rückgabewerte und Ausnahmen festlegen.
UseUtility.java
public class UseUtility {
public String getMessage(String name) throws Exception {
String trimmedName = Utility.trim(name);
return "Hello, " + trimmedName + ".";
}
public boolean setUp() {
Utility.clearDatabase();
//Kürzung
return true;
}
}
Verspotten Sie es und definieren Sie willkürliches Verhalten.
Utility.java
public class Utility {
public static String trim(String string) throws Exception {
//Nicht umgesetzte Annahme
return string;
}
public static void clearDatabase() {
//Annahme einer Verarbeitung, die Sie nicht ausführen möchten
}
}
Eine JUnit, die die zu testende Klasse aufruft.
Um PowerMock mit JUnit zu verwenden, geben Sie PowerMockRunner für "@ RunWith" an.
Geben Sie für "@ PrepareForTest" die zu verspottende Klasse an. Wenn nur statische Methoden verspottet werden, muss die aufrufende Klasse (Testzielklasse) nicht beschrieben werden.
UseUtilityTest.java
@RunWith(PowerMockRunner.class)
@PrepareForTest(Utility.class)
public class UseUtilityTest {
//Kürzung
}
doReturn Legen Sie den Rückgabewert in der statischen Methode fest.
@Test(expected = Exception.class)
public void test_doThrow() throws Exception {
//Vorbereitung
String name = "John ";
Exception expected_exception = new Exception("error!");
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Legen Sie die Scheinklasse und die Ausnahme fest
PowerMockito.doThrow(expected_exception).when(Utility.class);
//Legen Sie eine Methode fest, die die in ↑ festgelegte Ausnahme zurückgibt
Utility.trim(anyString());
//Lauf
UseUtility obj = new UseUtility();
obj.getMessage(name);
}
doThrow Mit der statischen Methode eine Ausnahme auslösen.
@Test
public void test_doThrow() throws Exception {
//Vorbereitung
String name = "John ";
String expected_message = "error!";
Exception expected_exception = new IllegalArgumentException(expected_message);
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Legen Sie die Scheinklasse und die Ausnahme fest
PowerMockito.doThrow(expected_exception).when(Utility.class);
//Legen Sie eine Methode fest, die die in ↑ festgelegte Ausnahme zurückgibt
Utility.trim(anyString());
//Lauf
try {
UseUtility obj = new UseUtility();
obj.getMessage(name);
fail();
} catch (Exception e) {
//Überprüfen Sie das Ergebnis
assertEquals(expected_exception, e.getCause());
assertEquals(expected_message, e.getMessage());
}
}
doCallRealMethod Rufen Sie die reale Methode auf, ohne einen Rückgabewert oder eine Ausnahme für die statische Methode festzulegen.
@Test
public void test_doCallRealMethod() throws Exception {
//Vorbereitung
String name = "John ";
String expected = "Hello, John .";
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Einstellung, um die Scheinklasse und die reale Sache aufzurufen
PowerMockito.doCallRealMethod().when(Utility.class);
//Legen Sie eine Methode fest, um die reale Sache aufzurufen
Utility.trim(anyString());
//Lauf
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Überprüfen Sie das Ergebnis
assertEquals(expected, actual);
}
doNothing Verwenden Sie diese Option, wenn Sie mit der statischen Methode nichts tun möchten.
@Test
public void test_doNothing() throws Exception {
//Bereit zu rennen
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Klasse verspotten und nichts einstellen
PowerMockito.doNothing().when(Utility.class);
//Legen Sie eine Methode fest, die nichts bewirkt
Utility.clearDatabase();
//Lauf
UseUtility obj = new UseUtility();
boolean actual = obj.setUp();
//Überprüfen Sie das Ergebnis
assertTrue(actual);
}
thenReturn Legen Sie den Rückgabewert in der statischen Methode fest.
@Test
public void test_thenReturn() throws Exception {
//Vorbereitung
String name = "John ";
String expected = "Hello, John.";
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Rückgabewert einstellen
PowerMockito.when(Utility.trim(anyString())).thenReturn("John");
//Lauf
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Überprüfen Sie das Ergebnis
assertEquals(expected, actual);
}
thenThrow Mit der statischen Methode eine Ausnahme auslösen.
@Test(expected = Exception.class)
public void test_thenThrow() throws Exception {
//Vorbereitung
String name = "John ";
Exception expected_exception = new Exception("error!");
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Ausnahme setzen
PowerMockito.when(Utility.trim(anyString())).thenThrow(expected_exception);
//Lauf
UseUtility obj = new UseUtility();
obj.getMessage(name);
}
thenCallRealMethod Rufen Sie die reale Methode auf, ohne einen Rückgabewert oder eine Ausnahme für die statische Methode festzulegen.
@Test
public void test_thenCallRealMethod() throws Exception {
//Vorbereitung
String name = "John ";
String expected = "Hello, John .";
//Verspottung
PowerMockito.mockStatic(Utility.class);
//Einstellung, um die reale Sache zu nennen
PowerMockito.when(Utility.trim(anyString())).thenCallRealMethod();
//Lauf
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Überprüfen Sie das Ergebnis
assertEquals(expected, actual);
}
PowerMock bietet verifyStatic zum Überprüfen verspotteter statischer Methoden.
Sie können Mockitos Zeiten, mindestens, mindestens einmal usw. verwenden, um die Anzahl der Anrufe zu überprüfen.
verifyStatic (Utility.class) ist gleichbedeutend mit verifyStatic (Utility.class, times (1)).
//Bestätigen Sie, dass es einmal aufgerufen wurde
PowerMockito.verifyStatic(Utility.class);
Utility.trim(anyString());
Recommended Posts