我有一个bean,它有几个bean注入了autowire注释(没有限定符)。现在,出于测试原因,我想向bean注入一些模拟而不是自动装配的模拟(一些DAO)。有没有什么办法可以改变注入哪个bean而不修改我的bean?我不喜欢添加注释我的代码只是为了测试它,然后删除然后生产。我正在使用spring 2.5。
bean看起来像这样:
@Transactional
@Service("validaBusinesService")
public class ValidaBusinesServiceImpl implements ValidaBusinesService {
@Autowired
OperationDAO operationDAO;
@Autowired
BinDAO binDAO;
@Autowired
CardDAO cardDAO;
@Autowired
UserDAO userDAO;
...
...
}
答案 0 :(得分:1)
使用ReflectionTestUtils
在单元测试中手动设置不同的实现。
这实际上是依赖注入的强大功能之一 - 对于如何注入依赖项并不重要。
答案 1 :(得分:0)
恕我直言,你应该提供setter来手动注入依赖项。然后,在单元测试案例中,这是一个明智的选择。如果您不希望从包外部调用setter,可能会将类的可见性降低到默认值。
如果要在集成测试场景中使用模拟,可以创建如下的模拟bean:
<bean class="….Mockito" factory-method="mock">
<constructor-arg value="….OperationDao" />
</bean>
这将为{bean} Mockito
设置一个OperationDao
模拟器。