I have bean support called for example. PeopleListBean. The goal is simple: return a list of people from the repository.
public class PeopleListBean { @Autowired private PersonRepository personRepository; private List<Person> people; @PostConstruct private void initializeBean() { this.people = loadPeople(); } public List<User> getPeople() { return this.people; } private List<Person> loadPeople() { return personRepository.getPeople(); } }
I want to create a unit test for this bean using Junit and Mockito.
Example test class below:
import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.example.PersonRepository; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/test-application-context.xml" }) public class PeopleListBeanTest { @Autowired private PeopleListBean peopleListBean; @Autowired private PersonRepository mockPersonRepository; @Before public void init() { reset(mockPersonRepository); } @Test public void canListPeople() { List<Person> people = getDummyList(); when(mockPersonRepository.getPeople().thenReturn(people); assertTrue(peopleListBean.getPeople().size() == people.size()); } }
My problem is when / how to mock the repository since loading occurs in the initializeBean (@PostConstruct) method. So after the class is built, the getPeople method is called before I can actually make fun of the method, which leads to a statement mismatch.
I am very grateful for the help / guidance!
source share