Avec PowerMock, vous pouvez définir la valeur de retour d'une méthode statique sur n'importe quelle valeur ou la faire renvoyer une exception.
Ici, on suppose que la méthode statique de la classe Utility (classe moqueuse) appelée depuis la classe UseUtility (classe cible de test) est simulée.
C'est la classe à tester qui est appelée depuis JUnit.
J'appelle la méthode statique de la classe Utility en interne et je souhaite définir ces valeurs de retour et ces exceptions.
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();
//réduction
return true;
}
}
Moquez-le et définissez un comportement arbitraire.
Utility.java
public class Utility {
public static String trim(String string) throws Exception {
//Hypothèse non mise en œuvre
return string;
}
public static void clearDatabase() {
//Hypothèse de traitement que vous ne souhaitez pas exécuter
}
}
Un JUnit qui appelle la classe testée.
Pour utiliser PowerMock avec JUnit, spécifiez PowerMockRunner pour @ RunWith
.
Pour @ PrepareForTest
, spécifiez la classe à simuler. Lorsque vous vous moquez uniquement de méthodes statiques, il n'est pas nécessaire de décrire la classe appelante (classe cible de test).
UseUtilityTest.java
@RunWith(PowerMockRunner.class)
@PrepareForTest(Utility.class)
public class UseUtilityTest {
//réduction
}
doReturn Définissez la valeur de retour dans la méthode statique.
@Test(expected = Exception.class)
public void test_doThrow() throws Exception {
//Préparation
String name = "John ";
Exception expected_exception = new Exception("error!");
//Railleur
PowerMockito.mockStatic(Utility.class);
//Définir une classe fictive et une exception
PowerMockito.doThrow(expected_exception).when(Utility.class);
//Définissez une méthode qui renvoie le jeu d'exceptions dans ↑
Utility.trim(anyString());
//Courir
UseUtility obj = new UseUtility();
obj.getMessage(name);
}
doThrow Lancez une exception avec la méthode statique.
@Test
public void test_doThrow() throws Exception {
//Préparation
String name = "John ";
String expected_message = "error!";
Exception expected_exception = new IllegalArgumentException(expected_message);
//Railleur
PowerMockito.mockStatic(Utility.class);
//Définir une classe fictive et une exception
PowerMockito.doThrow(expected_exception).when(Utility.class);
//Définissez une méthode qui renvoie le jeu d'exceptions dans ↑
Utility.trim(anyString());
//Courir
try {
UseUtility obj = new UseUtility();
obj.getMessage(name);
fail();
} catch (Exception e) {
//Vérifiez le résultat
assertEquals(expected_exception, e.getCause());
assertEquals(expected_message, e.getMessage());
}
}
doCallRealMethod Appelez la méthode réelle sans définir de valeur de retour ou d'exception pour la méthode statique.
@Test
public void test_doCallRealMethod() throws Exception {
//Préparation
String name = "John ";
String expected = "Hello, John .";
//Railleur
PowerMockito.mockStatic(Utility.class);
//Réglage pour appeler la classe simulée et la vraie chose
PowerMockito.doCallRealMethod().when(Utility.class);
//Définir une méthode pour appeler la chose réelle
Utility.trim(anyString());
//Courir
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Vérifiez le résultat
assertEquals(expected, actual);
}
doNothing À utiliser lorsque vous ne souhaitez rien faire avec la méthode statique.
@Test
public void test_doNothing() throws Exception {
//Prêt à courir
//Railleur
PowerMockito.mockStatic(Utility.class);
//Mock class et ne rien faire
PowerMockito.doNothing().when(Utility.class);
//Définissez une méthode qui ne fait rien
Utility.clearDatabase();
//Courir
UseUtility obj = new UseUtility();
boolean actual = obj.setUp();
//Vérifiez le résultat
assertTrue(actual);
}
thenReturn Définissez la valeur de retour dans la méthode statique.
@Test
public void test_thenReturn() throws Exception {
//Préparation
String name = "John ";
String expected = "Hello, John.";
//Railleur
PowerMockito.mockStatic(Utility.class);
//Définir la valeur de retour
PowerMockito.when(Utility.trim(anyString())).thenReturn("John");
//Courir
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Vérifiez le résultat
assertEquals(expected, actual);
}
thenThrow Lancez une exception avec la méthode statique.
@Test(expected = Exception.class)
public void test_thenThrow() throws Exception {
//Préparation
String name = "John ";
Exception expected_exception = new Exception("error!");
//Railleur
PowerMockito.mockStatic(Utility.class);
//Définir une exception
PowerMockito.when(Utility.trim(anyString())).thenThrow(expected_exception);
//Courir
UseUtility obj = new UseUtility();
obj.getMessage(name);
}
thenCallRealMethod Appelez la méthode réelle sans définir de valeur de retour ou d'exception pour la méthode statique.
@Test
public void test_thenCallRealMethod() throws Exception {
//Préparation
String name = "John ";
String expected = "Hello, John .";
//Railleur
PowerMockito.mockStatic(Utility.class);
//Mise à appeler la vraie chose
PowerMockito.when(Utility.trim(anyString())).thenCallRealMethod();
//Courir
UseUtility obj = new UseUtility();
String actual = obj.getMessage(name);
//Vérifiez le résultat
assertEquals(expected, actual);
}
PowerMock fournit verifyStatic pour valider les méthodes statiques simulées.
Vous pouvez utiliser les heures de Mockito, atLeast, asLeastOnce, etc. pour vérifier le nombre d'appels.
verifyStatic (Utility.class) est synonyme de verifyStatic (Utility.class, times (1)).
//Confirmez qu'il a été appelé une fois
PowerMockito.verifyStatic(Utility.class);
Utility.trim(anyString());
Recommended Posts