web-dev-qa-db-fra.com

Comment vérifier qu'une méthode spécifique n'a pas été appelée avec Mockito?

Comment vérifier qu'une méthode est not appelée sur la dépendance d'un objet?

Par exemple:

public interface Dependency {
    void someMethod();
}

public class Foo {
    public bar(final Dependency d) {
        ...
    }
}

Avec le test 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??**
    }
}
531
beluchin

Encore plus significatif:

import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;

// ...

verify(dependency, never()).someMethod();

La documentation de cette fonctionnalité est là §4 "Vérification du nombre exact d'invocations/au moins x/jamais" , et le never javadoc est ici .

925
Brice

utilise le second argument de la méthode Mockito.verify, comme dans:

verify(dependency, Mockito.times(0)).someMethod()

98
beluchin

En règle générale, j’ai tendance à utiliser un bloc @After dans le test:

@After
public void after() {
    verifyNoMoreInteractions(<your mock1>, <your mock2>...);
}

Ensuite, le test est libre de vérifier uniquement comment devrait être appelé.

De plus, j’ai souvent oublié de vérifier "pas d’interactions", mais je me suis rendu compte plus tard que les choses appelées n’auraient pas dû être.

Je trouve donc ce modèle utile pour intercepter tous les appels inattendus qui n'ont pas été spécifiquement vérifiés.

17
David Lavender

Les méthodes verifyNoMoreInteractions() et verifyZeroInteracions() ont en interne la même implémentation que:

public static transient void verifyNoMoreInteractions(Object mocks[])
{
    MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}

public static transient void verifyZeroInteractions(Object mocks[])
{
    MOCKITO_CORE.verifyNoMoreInteractions(mocks);
}

nous pouvons donc utiliser n'importe lequel d'entre eux sur un objet fantaisie ou sur un tableau d'objets fantaisie pour vérifier qu'aucune méthode n'a été appelée à l'aide d'objets fantaisie.

8
Ujjwal