2012-10-02 61 views
0

嗨,我有一個我想測試的類。這個類有一個自動裝配的DAO對象,在@PostConstruct方法中使用了這個對象,但是我想使用模擬而不是真正的對象。這裏有一個例子:構造函數之前的自動彈簧

@Autowired 
PersonDao personDao; 
//Constructor 
public Person() 
{ 
    //Do stuff 
} 

@PostConstruct 
void init() 
{ 
    //I need it to be a mock 
    personDao.add(new Person()); 
} 

回答

1

如果你想用嘲笑PersonDao你有幾種選擇:

  • 定義PersonDao模擬爲一個Spring bean與primary="true"屬性,使其具有超過普通的bean優先

  • 將自動裝配移動到構造函數並通過提供模擬手動創建Person

    PersonDao personDao; 
    
    @Autowired 
    public Person(PersonDao personDao) 
    { 
        this.personDao = personDao; 
    } 
    

    則:

    new Person(personDaoMock) 
    

    ,不依賴於Spring。

  • 您可以使用ReflectionTestUtils修改私有字段:

    ReflectionTestUtils.setField(person, "personDao", mock); 
    
相關問題