when uso usar unitarios test mock datos como java tdd mockito

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()