Estoy usando Mockito para escribir una prueba unitaria en Java, y me gustaría verificar que un determinado método es el último llamado en un objeto.Use Mockito para verificar que no se llame nada después de un método
que estoy haciendo algo como esto en el código bajo prueba:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
En mi maqueta, que no se preocupan por el orden en que edito todo en la fila, pero es muy importante que I no intente hacer algo más después de haberlo guardado. ¿Existe una forma correcta de hacer esto?
Tenga en cuenta que no estoy buscando verifyNoMoreInteractions: no confirma que saveToDatabase es lo último que se llamó, y también falla si llamo a algo en la fila que no verifico explícitamente. Me gustaría poder decir algo como:
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();
Si ayuda, estoy cambiando a Mockito de una prueba JMock que hizo esto:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
Una nota del futuro: finalmente refactorizamos esto para evitar la dependencia orden. Específicamente, movimos la parte saveToDatabase() a una capa externa del código, donde se llamaría automáticamente en el momento adecuado. En general, si necesitas hacer algo como esto con un simulacro, tus pruebas te dicen que debes refactorizar. Dicho esto, sigue siendo agradable tener una prueba que pueda funcionar hasta que se cambie el diseño. –