/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockitousage.annotation; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockitousage.IMethods; import org.mockitoutil.TestBase; import java.util.LinkedList; import java.util.List; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertSame; import static org.mockito.Mockito.verify; @SuppressWarnings("unchecked") public class CaptorAnnotationBasicTest extends TestBase { public class Person { private final String name; private final String surname; public Person(String name, String surname) { this.name = name; this.surname = surname; } public String getName() { return name; } public String getSurname() { return surname; } } public interface PeopleRepository { void save(Person capture); } @Mock PeopleRepository peopleRepository; private void createPerson(String name, String surname) { peopleRepository.save(new Person(name, surname)); } @Test public void shouldUseCaptorInOrdinaryWay() { //when createPerson("Wes", "Williams"); //then ArgumentCaptor<Person> captor = ArgumentCaptor.forClass(Person.class); verify(peopleRepository).save(captor.capture()); assertEquals("Wes", captor.getValue().getName()); assertEquals("Williams", captor.getValue().getSurname()); } @Captor ArgumentCaptor<Person> captor; @Test public void shouldUseAnnotatedCaptor() { //when createPerson("Wes", "Williams"); //then verify(peopleRepository).save(captor.capture()); assertEquals("Wes", captor.getValue().getName()); assertEquals("Williams", captor.getValue().getSurname()); } @SuppressWarnings("rawtypes") @Captor ArgumentCaptor genericLessCaptor; @Test public void shouldUseGenericlessAnnotatedCaptor() { //when createPerson("Wes", "Williams"); //then verify(peopleRepository).save((Person) genericLessCaptor.capture()); assertEquals("Wes", ((Person) genericLessCaptor.getValue()).getName()); assertEquals("Williams", ((Person) genericLessCaptor.getValue()).getSurname()); } @Captor ArgumentCaptor<List<String>> genericListCaptor; @Mock IMethods mock; @Test public void shouldCaptureGenericList() { //given List<String> list = new LinkedList<String>(); mock.listArgMethod(list); //when verify(mock).listArgMethod(genericListCaptor.capture()); //then assertSame(list, genericListCaptor.getValue()); } }