2012-07-17 68 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() { 

    } 

    // . 
    // . 
    // . 
} 
相關問題