Java 向具有@Autowired注释的bean注入模型
我有一个bean,其中有几个bean注入了autowire注释(没有限定符)。现在,出于测试原因,我想向bean注入一些mock,而不是自动连接的mock(一些dao)。有没有什么方法可以在不修改bean的情况下更改正在注入的bean?我不喜欢在我的代码中添加注释只是为了测试它,然后删除它以用于生产。我正在使用Spring2.5 该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
@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的类。但是对于这种特殊情况,我不能更改类