Utilisation Mockito vérifier que rien n'est appelée après la méthode

Je suis en utilisant Mockito d'écrire un test unitaire en Java, et j'aimerais vérifier qu'une certaine méthode est la dernier appelée sur un objet.

Je suis en train de faire quelque chose comme ceci dans le code en cours de test:

row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();

Dans ma maquette, je ne se soucient pas de l'ordre dans lequel j'ai tout modifier sur la ligne, mais il est très important que je pas essayer de faire quelque chose de plus après que j'ai enregistré. Est-il une bonne façon de le faire?

Remarque que je ne suis pas à la recherche pour verifyNoMoreInteractions: il n'est pas en mesure de confirmer que saveToDatabase est la dernière chose qui s'appelle, et il échoue également si je l'appelle, rien sur la ligne que je n'ai pas explicitement vérifier. Je voudrais être en mesure de dire quelque chose comme:

verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();

Si cela peut aider, je suis passer à Mockito à partir d'un JMock test qui a fait ceci:

row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
  • Une note de l'avenir: nous avons finalement refait ceci afin d'éviter la dépendance de l'ordre. Plus précisément, nous avons déplacé le saveToDatabase() d'une part, la couche extérieure du code, où il serait automatiquement appelé au bon moment. En général, si vous avez besoin de faire quelque chose comme ceci avec un simulacre, vos tests sont en train de vous dire de refactoriser. Cela dit, il est toujours agréable d'avoir un test qui peut fonctionner jusqu'à ce que la conception est modifiée.
InformationsquelleAutor Moss Collum | 2009-02-04