java - uso - ¿Cómo verificar que un método específico no fue llamado usando Mockito?
test unitarios junit mockito (4)
Aún más significativo:
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
// ...
verify(dependency, never()).someMethod();
La documentación de esta función se encuentra en el § 4 "Verificación del número exacto de invocaciones / al menos x / nunca" , y el javadoc de never
está here .
¿Cómo verificar que no se llama a un método en la dependencia de un objeto?
Por ejemplo:
public interface Dependency {
void someMethod();
}
public class Foo {
public bar(final Dependency d) {
...
}
}
Con la prueba de Foo:
public class FooTest {
@Test
public void dependencyIsNotCalled() {
final Foo foo = new Foo(...);
final Dependency dependency = mock(Dependency.class);
foo.bar(dependency);
**// verify here that someMethod was not called??**
}
}
Como un patrón más general a seguir, tiendo a usar un bloque @After
en la prueba:
@After
public void after() {
verifyNoMoreInteractions(<your mock1>, <your mock2>...);
}
Entonces la prueba es libre de verificar solo lo que se debe llamar.
Además, descubrí que a menudo olvidaba buscar "no interacciones", solo para descubrir más tarde que se estaban llamando cosas que no deberían haber sido.
Así que encuentro este patrón útil para capturar todas las llamadas inesperadas que no han sido verificadas específicamente.
Tanto el verifyNoMoreInteractions()
como verifyZeroInteracions()
internamente tienen la misma implementación que:
public static transient void verifyNoMoreInteractions(Object mocks[])
{
MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}
public static transient void verifyZeroInteractions(Object mocks[])
{
MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}
así que podemos usar cualquiera de ellos en un objeto simulado o en una matriz de objetos simulados para verificar que no se haya llamado a ningún método utilizando objetos simulados.
Utilice el segundo argumento en el método Mockito.verify
, como en:
verify(dependency, Mockito.times(0) ).someMethod()