构造函数之前的Spring autowire

时间:2012-10-02 12:14:48

标签: spring autowired

嗨,我有一个我想测试的课程。这个类有一个自动装配的DAO对象,这个对象在@PostConstruct方法中使用,但我想使用mock而不是真正的对象是否有办法。这是一个例子:

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

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

1 个答案:

答案 0 :(得分:1)

如果你想使用模拟的PersonDao,你有几个选择:

  • PersonDao mock定义为具有primary="true"属性的Spring bean,以便它优先于普通bean

  • 将自动装配移动到构造函数并通过提供模拟手动创建Person

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

    然后:

    new Person(personDaoMock)
    

    并且不依赖于Spring。

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

    ReflectionTestUtils.setField(person, "personDao", mock);