将模型注入具有@Autowired注释的bean

时间:2010-05-07 15:01:59

标签: java unit-testing spring

我有一个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;  

    ...
    ...
}

2 个答案:

答案 0 :(得分:1)

使用ReflectionTestUtils在单元测试中手动设置不同的实现。

这实际上是依赖注入的强大功能之一 - 对于如何注入依赖项并不重要。

答案 1 :(得分:0)

恕我直言,你应该提供setter来手动注入依赖项。然后,在单元测试案例中,这是一个明智的选择。如果您不希望从包外部调用setter,可能会将类的可见性降低到默认值。

如果要在集成测试场景中使用模拟,可以创建如下的模拟bean:

<bean class="….Mockito" factory-method="mock">
  <constructor-arg value="….OperationDao" />
</bean>

这将为{bean} Mockito设置一个OperationDao模拟器。