spring - spring 在构造函数前自动装配

  显示原文与译文双语对照的内容
0 0

嗨,我有个课要测试。 这里类有一个is对象,该对象在 @PostConstruct 方法中使用,但我想使用模拟而非真实对象。 以下是一个示例:

@Autowired
PersonDao personDao;
//Constructor 
public Person()
{
//Do stuff
}
@PostConstruct
void init()
{
//I need it to be a mock
 personDao.add(new Person());
}
时间:原作者:1个回答

0 0

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

  • primary="true" 属性定义 PersonDao mock作为 spring bean,这样它将优先于普通 bean

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

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

    然后:

    new Person(personDaoMock)

    而且不要依赖 spring 。

  • 你可以使用 ReflectionTestUtils 修改 private 字段:

    ReflectionTestUtils.setField(person,"personDao", mock);
原作者:
...