Mockito verify no more interactions with any mock

后端 未结 1 630
孤城傲影
孤城傲影 2020-12-14 00:47

In Mockito, is there a way to verify that there are no more interactions on any mock I have created?

For example:

public void test()
{
  ...
  TestOb         


        
相关标签:
1条回答
  • 2020-12-14 01:04

    Since verifyNoMoreInteractions take an array of object we have to find a way to get all the created mocks.

    You can create this class

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

    and then use it in your 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
        }
    }
    

    or with 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
        }
    }
    

    It works but it adds a dependency on mockito internal.

    0 讨论(0)
提交回复
热议问题