web-dev-qa-db-fra.com

Mockito ne vérifie plus aucune interaction avec aucune maquette

Dans Mockito, existe-t-il un moyen de vérifier qu'il n'y a plus d'interactions sur les faux que j'ai créés?

Par exemple:

public void test()
{
  ...
  TestObject obj = mock(TestObject);
  myClass.test();
  verifyNoMoreInteractionsWithMocks();  <-------
}

Existe-t-il une telle méthode?

26
sworded

Depuis verifyNoMoreInteractions prenez un tableau d'objets, nous devons trouver un moyen d'obtenir toutes les maquettes créées.

Vous pouvez créer cette classe

public class MocksCollector {
    private final List<Object> createdMocks;

    public MocksCollector() {
        createdMocks = new LinkedList<Object>();
        final MockingProgress progress = new ThreadSafeMockingProgress();
        progress.setListener(new CollectCreatedMocks(createdMocks));
    }

    public Object[] getMocks() {
        return createdMocks.toArray();
    }
}

puis utilisez-le dans votre test:

    public class ATest {
    private final MocksCollector mocksCollector = new MocksCollector();

    @Test
    public void test() throws Exception {
        A a1 = mock(A.class);
        A a2 = mock(A.class);
        A a3 = mock(A.class);
        assertEquals("wrong amount of mocks", 3, mocksCollector.getMocks().length);
        verifyNoMoreInteractions(mocksCollector.getMocks());
        a3.doSomething();
        verifyNoMoreInteractions(mocksCollector.getMocks()); // fail
    }
}

ou avec des annotations:

@RunWith(MockitoJUnitRunner.class)
public class A2Test {
    private final MocksCollector mocksCollector = new MocksCollector();

    @Mock
    private A a1;
    @Mock
    private A a2;
    @Mock
    private A a3;

    @Test
    public void test() throws Exception {
        assertEquals("wrong amount of mocks", 3, mocksCollector.getMocks().length);
        verifyNoMoreInteractions(mocksCollector.getMocks());
        a2.doSomething();
        verifyNoMoreInteractions(mocksCollector.getMocks()); // fail
    }
}

Cela fonctionne mais cela ajoute une dépendance sur mockito internal.

33
gontard