我有一个类,我想模拟单元测试。该类有一个带@Autowired
注释的字段。我需要将该模拟注入到junit中使用的spring上下文中。然而,即使它是一个模拟,spring仍然会看到@Autowired
并且正在寻找另一个类的实例来注入。但是,上下文没有该类的实例,因为不需要一个实例(因为可能使用该字段的方法被模拟)。
我已经尝试了XML和Java配置,并且在两种情况下都会创建模拟,然后Spring仍然会尝试查找自动装入模拟的内容(注意我在两种情况下都设置了autowire = no)。
我尝试过的XML:
<bean class="org.easymock.EasyMock" factory-method="mock" autowire="no">
<constructor-arg value="com.stackoverflow.BeanClass" />
</bean>
我尝试过的Java配置:
@Bean(autowire = Autowire.NO)
public BeanClass beanClass1()
{
return EasyMock.createMock(BeanClass.class);
}
注意我已尝试使用EasyMock和Mockito获得相同的结果。
我发现这样做的唯一方法是执行类似context.getBeanFactory().registerSingleton("name", mock)
的操作 - 但如果使用SpringJUnit4ClassRunner
则无法执行此操作。
在任何人说“只是不这样做”之前,这是针对集成测试而不是纯粹的单元测试,而某些bean的复杂布线逻辑意味着在这里实例化弹簧上下文可以节省大量的重复在测试中努力。
那么,我怎样才能阻止Spring尝试将bean自动装入我的模拟领域?