J'utilise Mockito pour écrire un test unitaire en Java, et je voudrais vérifier qu'une certaine méthode est la la dernière appelée sur un objet.
Je fais quelque chose comme ça dans le code sous test:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
Dans ma maquette, je ne me soucie pas de l'ordre dans lequel je modifie tout sur la ligne, mais il est très important que j'pas essaie de faire quoi que ce soit de plus après l'avoir enregistré. Y at-il un bon moyen de le faire?
Notez que je ne recherche pas verifyNoMoreInteractions: cela ne confirme pas que saveToDatabase est la dernière chose appelée, et il échoue également si j'appelle quelque chose sur la ligne que je ne vérifie pas explicitement. Je voudrais pouvoir dire quelque chose comme:
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();
Si cela aide, je passe à Mockito à partir d'un test JMock qui a fait ceci:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
Je pense que cela nécessite un travail plus personnalisé.
verify(row, new LastCall()).saveToDatabase();
puis
public class LastCall implements VerificationMode {
public void verify(VerificationData data) {
List<Invocation> invocations = data.getAllInvocations();
InvocationMatcher matcher = data.getWanted();
Invocation invocation = invocations.get(invocations.size() - 1);
if (!matcher.matches(invocation)) throw new MockitoException("...");
}
}
Réponse précédente:
Tu as raison. verifyNoMoreInteractions est ce dont vous avez besoin.
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verify(row).editABunchMoreStuff();
verify(row).saveToDatabase();
verifyNoMoreInteractions(row);
Pas à 100% sur le sujet, mais je cherchais simplement à trouver le contraire de vérifier, et c'était le seul résultat pertinent, il finit par être après Mockito.verifyZeroInteractions (mock);
Au cas où quelqu'un d'autre finirait par chercher ça ...