Unittest avec Mockito - Ignorer l'appel de la méthode
Im struggeling pour en savoir Mockito de unittest une application. Ci-dessous est un exemple de la méthode je suis actuellement en train de tester,
public boolean validateFormula(String formula) {
boolean validFormula = true;
double result = 0;
try {
result = methodThatCalculatAFormula(formula, 10, 10);
} catch (Exception e) {
validFormula = false;
}
if (result == 0)
validFormula = false;
return validFormula;
}
Cette méthode appelle une autre méthode de la même classe, methodThatCalculatAFormula
, que je ne veux pas appeler quand je unittest validateFormula
.
Pour tester cela, je voudrais voir comment cette méthode se comporte selon ce methodThatCalculatAFormula
retourne. Puisqu'il revient false
quand result
est 0, et renvoie valide si c'est un nombre quelconque, mais 0 je voudrais simuler ces returnvalues sans courir le réel methodThatCalculatAFormula
méthode.
J'ai écrit ce qui suit:
public class FormlaServiceImplTest {
@Mock
FormulaService formulaService;
@Before
public void beforeTest() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testValidateFormula() {
`//Valid since methodThatCalculatAFormula returns 3`
when(formulaService.methodThatCalculatAFormula(anyString(),anyDouble(),anyDouble(),anyBoolean())).thenReturn((double)3);
assertTrue(formulaService.validateFormula("Valid"));
//Not valid since methodThatCalculatAFormula returns 0
when(formulaService.methodThatCalculatAFormula(anyString(),anyDouble(),anyDouble(),anyBoolean())).thenReturn((double)0);
assertFalse(formulaService.validateFormula("Not Valid"));
}
Cependant lorsque j'exécute le code ci-dessus mon assertTrue
est false
. Im deviner que j'ai fait quelque chose de mal dans ma maquette de l'installation. Comment pourrais-je tester la méthode ci-dessus par la simulation de la valeur de retour de methodThatCalculatAFormula
sans réellement en l'appelant.
OriginalL'auteur John Snow | 2013-03-13
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez de réaliser n'est pas une maquette mais un espion (fantaisie partielle). Vous ne voulez pas de se moquer d'un objet, mais une seule méthode.
Cela fonctionne:
et
Mais vous ne devriez pas utiliser spy. Vous devriez refactoriser classe en deux, de sorte que vous pouvez tester un contre un simulacre de l'autre.
Oui, et assurez-vous d'utiliser la syntaxe doReturn(le résultat).lorsque(espion).méthode() et pas quand(espion.méthode()).doReturn(le résultat). Ce dernier ne fonctionne pas, qu'il appellera la méthode originale avant de définir la maquette de la méthode
Ouais j'ai remarqué que depuis que je suis un UnfinishedStubbException qui j'ai googlé et trouvé la réponse.
OriginalL'auteur rcomblen
Vous ne pouvez pas tester le code dans Moqué de classes. Si vous venez de vous en Moquer, toutes les méthodes sont les bouchons.
Vous avez de l'Espionnage à la place. Lire la Mockito de la documentation sur la façon d'utiliser Spy.
OriginalL'auteur David M. Karr