@Test public final void shouldGenerateWorkPlanEntity() throws Exception { // given Entity emptyWorkPlan = mock(Entity.class); when(workPlanDD.create()).thenReturn(emptyWorkPlan); when(workPlanDD.save(emptyWorkPlan)).thenReturn(emptyWorkPlan); when(emptyWorkPlan.getDataDefinition()).thenReturn(workPlanDD); Entity order = mock(Entity.class); @SuppressWarnings("unchecked") Iterator<Entity> iterator = mock(Iterator.class); when(iterator.hasNext()).thenReturn(true, true, true, false); when(iterator.next()).thenReturn(order); @SuppressWarnings("unchecked") List<Entity> orders = mock(List.class); when(orders.iterator()).thenReturn(iterator); when(orders.size()).thenReturn(3); when(orders.get(Mockito.anyInt())).thenReturn(order); @SuppressWarnings("rawtypes") ArgumentCaptor<List> listArgCaptor = ArgumentCaptor.forClass(List.class); ArgumentCaptor<String> stringArgCaptor = ArgumentCaptor.forClass(String.class); // when workPlanService.generateWorkPlanEntity(orders); // then verify(emptyWorkPlan, times(1)).setField(Mockito.eq("orders"), listArgCaptor.capture()); @SuppressWarnings("unchecked") List<Entity> resultOrders = listArgCaptor.getValue(); Assert.assertEquals(orders.size(), resultOrders.size()); Assert.assertSame(order, resultOrders.get(0)); Assert.assertSame(order, resultOrders.get(1)); Assert.assertSame(order, resultOrders.get(2)); verify(emptyWorkPlan, times(1)).setField(Mockito.eq("name"), stringArgCaptor.capture()); Assert.assertEquals(TRANSLATED_STRING, stringArgCaptor.getValue()); verify(emptyWorkPlan, times(1)).setField(Mockito.eq("type"), stringArgCaptor.capture()); Assert.assertEquals(WorkPlanType.NO_DISTINCTION.getStringValue(), stringArgCaptor.getValue()); }