我正在测试的课程中我有一个字段,我们称之为private List<Person> people
。在测试中,我想验证是否创建了具有某些状态的特定对象。因此,在运行该方法后,我需要访问该列表及其中创建的对象。
我正在使用JUnit和Mockito。
示例测试类:
@RunWith(MockitoJUnitRunner.class)
public class Testclass {
@InjectMock
private TestedClass tested;
@Mock(name = "personer")
private List<Person> personerMock;
@Test
public void testMethod() throws BaseException {
PersonA personA = kalle_KMD();
when(personService.getPerson(any(), any())).thenReturn(Optional.of(personA));
Properties p = new Properties();
JobbParametrar params = JobbParametrar.skapa(p);
batch.uppgift(new PersonIdÄrFöretag(1L, false), params, new KörningsId(1L), user);
assertEquals(1, personerMock.size());
}
}
要测试的课程:
public TestedClass {
private List<Person> persons = Collections.synchronizedList(new ArrayList<Person>());
public void testedMethod() {
...
PersonA personA = personService.getPerson(identitet, användare);
Person p = createPerson(personA);
persons.add(p);
...
}
}
现在,我如何测试创建的对象(Person p
)是否已添加到列表中,并访问该对象以查看其值?或者我应该采用完全不同的方法,在这种情况下不使用Mockito?
像在本例中一样,在测试类中模拟实例字段personerMock
不起作用。
答案 0 :(得分:1)
你这样做的方式应该有效,但你需要捕获add的参数。
ArgumentCaptor<Person> captor = ArgumentCaptor.forClass(Person.class);
verify(personerMock).add(captor.capture());
Person createdPerson = captor.getValue();
// verify the values you're expecting in the person