2012-07-17 73 views
4

我有一个支持bean,例如: PeopleListBean。目的很简单:从存储库返回一个人员列表。JSF支持豆单元测试

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(); 
    } 

} 

我想使用Junit和Mockito为这个bean创建一个单元测试。
下面 实施例的测试类:

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()); 
    } 
} 

我的问题是,当/如何嘲笑库由于装载发生在initializeBean方法(@PostConstruct)。所以在构造类之后,我会调用“getPeople”方法,然后才能真正模拟导致断言不匹配的方法。

我真的很感谢一些帮助/指导!

回答

0

使用JUnit的@BeforeClass注释

你的代码,因此将如下所示:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:/test-application-context.xml" }) 
public class PeopleListBeanTest { 

    @Autowired 
    private PeopleListBean peopleListBean; 
    @Autowired 
    private PersonRepository mockPersonRepository; 

    @BeforeClass 
    public static void initialise() { 

    } 

    // . 
    // . 
    // . 
}