Java 向具有@Autowired注释的bean注入模型

Java 向具有@Autowired注释的bean注入模型,java,unit-testing,spring,Java,Unit Testing,Spring,我有一个bean,其中有几个bean注入了autowire注释(没有限定符)。现在,出于测试原因,我想向bean注入一些mock,而不是自动连接的mock(一些dao)。有没有什么方法可以在不修改bean的情况下更改正在注入的bean?我不喜欢在我的代码中添加注释只是为了测试它,然后删除它以用于生产。我正在使用Spring2.5 该bean如下所示: @Transactional @Service("validaBusinesService") public class ValidaBu

我有一个bean,其中有几个bean注入了autowire注释(没有限定符)。现在,出于测试原因,我想向bean注入一些mock,而不是自动连接的mock(一些dao)。有没有什么方法可以在不修改bean的情况下更改正在注入的bean?我不喜欢在我的代码中添加注释只是为了测试它,然后删除它以用于生产。我正在使用Spring2.5

该bean如下所示:

@Transactional  
@Service("validaBusinesService")  
public class ValidaBusinesServiceImpl implements ValidaBusinesService {

    @Autowired  
    OperationDAO operationDAO;  
    @Autowired  
    BinDAO binDAO;  
    @Autowired  
    CardDAO cardDAO;  
    @Autowired  
    UserDAO userDAO;  

    ...
    ...
}
<bean class="….Mockito" factory-method="mock">
  <constructor-arg value="….OperationDao" />
</bean>
用于在单元测试中手动设置不同的实现

这实际上是依赖项注入的功能之一——它与类如何注入依赖项无关。

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


这实际上是依赖项注入的功能之一——如何注入依赖项对类来说并不重要。

我想你应该提供setter来手动注入依赖项。那么,在单元测试用例中,这是一个无需思考的问题。如果您不希望setter可以从包外部调用,那么可以将类的可见性降低到默认值

如果您想在集成测试场景中使用mock,可以创建如下的mock bean:

@Transactional  
@Service("validaBusinesService")  
public class ValidaBusinesServiceImpl implements ValidaBusinesService {

    @Autowired  
    OperationDAO operationDAO;  
    @Autowired  
    BinDAO binDAO;  
    @Autowired  
    CardDAO cardDAO;  
    @Autowired  
    UserDAO userDAO;  

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


这将为
OperationDao
设置一个
Mockito
mock作为Springbean。

您应该提供setter来手动注入依赖项。那么,在单元测试用例中,这是一个无需思考的问题。如果您不希望setter可以从包外部调用,那么可以将类的可见性降低到默认值

如果您想在集成测试场景中使用mock,可以创建如下的mock bean:

@Transactional  
@Service("validaBusinesService")  
public class ValidaBusinesServiceImpl implements ValidaBusinesService {

    @Autowired  
    OperationDAO operationDAO;  
    @Autowired  
    BinDAO binDAO;  
    @Autowired  
    CardDAO cardDAO;  
    @Autowired  
    UserDAO userDAO;  

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


这将为
OperationDao
设置一个
Mockito
mock作为Springbean。

我不知道那个类。看起来很棒!我不知道那门课。看起来很棒!当一个答案适合你的时候,你应该把它标记为被接受(在计票器下面打勾)当一个答案适合你的时候,你应该把它标记为被接受(在计票器下面打勾)我同意有setter和getter是一个好主意,特别是如果在某个时候我使用那些没有spring的类。但是对于这种特殊情况,我不能改变类。我同意使用setter和getter是一个好主意,特别是在某些情况下,如果我使用那些没有spring的类。但是对于这种特殊情况,我不能更改类