J'utilise Mockito pour écrire un test unitaire en Java, et je voudrais vérifier qu'une certaine méthode est la dernière appelée sur un objet.Utiliser Mockito pour vérifier que rien n'est appelé après une méthode
que je fais quelque chose comme cela dans le code sous test:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
Dans ma maquette, je ne se soucient pas de l'ordre dans lequel je modifie tout sur la ligne, mais il est très important que Je pas essayer de faire quelque chose de plus après que je l'ai enregistré. Y at-il un bon moyen de le faire?
Notez que je ne recherche pas verifyNoMoreInteractions: il ne confirme pas que saveToDatabase est la dernière chose appelée, et il échoue également si j'appelle quoi que ce soit 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 elle aide, je passe à Mockito d'un test de JMock qui a fait ceci:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
Une note de l'avenir: nous refactorisé finalement cela pour éviter la dépendance de l'ordre. Plus précisément, nous avons déplacé la partie saveToDatabase() vers une couche externe du code, où elle serait automatiquement appelée au bon moment. En général, si vous avez besoin de faire quelque chose comme ça avec un simulacre, vos tests vous disent de refactoriser. Cela dit, il est toujours agréable d'avoir un test qui peut fonctionner jusqu'à ce que le design soit changé. –