Search code examples
javaunit-testingjunitmockito

How to capture a list of specific type with mockito


Is there a way to capture a list of specific type using mockitos ArgumentCaptore. This doesn't work:

ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(ArrayList.class);

Solution

  • The nested generics-problem can be avoided with the @Captor annotation:

    public class Test{
    
        @Mock
        private Service service;
    
        @Captor
        private ArgumentCaptor<ArrayList<SomeType>> captor;
    
        @Before
        public void init(){
            MockitoAnnotations.openMocks(this);
        }
    
        @Test 
        public void shouldDoStuffWithListValues() {
            //...
            verify(service).doStuff(captor.capture()));
        }
    }