2012-10-02 101 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); 
    
相关问题