嗨,我有一个我想测试的课程。这个类有一个自动装配的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());
}
答案 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);