Spring 在尝试不同的解决方案后,使用 JUnit4 Runner 进行的测试不起作用
Spring Testing with JUnit4 Runner does not work after trying different solutions
当使用 JUnit4 测试运行程序自动装配我的 spring 测试 class 时,上下文启动会产生以下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.mypackage.TestClass': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.mypackage.ServiceClass com.mypackage.TestClass.service;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mypackage.ServiceClass] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的设置
TestClass
注释如下
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/testContext.xml"})
自动装配的字段是这样注释的
@Autowired
ACrudRepository repository; // is autowired
@Autowired
@Qualifier("service")
ServiceClass service; // is NOT autowired
testContext.xml
具有以下 Bean 定义(以及更多):
<bean class="com.mypackage.ServiceClass" id="service">
<property name="someBoolean" value="false"/>
<property name="otherBoolean" value="false"/>
<property name="someList">
<list><value>withOneValue</value></list>
</property>
</bean>
<jpa:repositories base-package="com.mypackage"/>
我试过的:
@Qualifier("service")
- 选中
- 选中
- 在 xml 中添加了
<component-scan>
,在 ServiceClass
中添加了 @Service/@Component
- 在
TestClass
上添加了 @ComponentScan
这个项目中的问题(此处未提及)是自动装配 bean 中的 <tx:annotation-driven/>
标记和 @Transactional
注释。此注解通常使用 java interface-based-proxy 不能自动装配,因为它们与 class 不是同一类型。
为了解决这个问题,我们使用了标签 <tx:annotation-driven proxy-target-class="true"/>
。
非常感谢这个回答:
当使用 JUnit4 测试运行程序自动装配我的 spring 测试 class 时,上下文启动会产生以下异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.mypackage.TestClass': Injection of autowired dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.mypackage.ServiceClass com.mypackage.TestClass.service;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mypackage.ServiceClass] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我的设置
TestClass
注释如下
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/testContext.xml"})
自动装配的字段是这样注释的
@Autowired
ACrudRepository repository; // is autowired
@Autowired
@Qualifier("service")
ServiceClass service; // is NOT autowired
testContext.xml
具有以下 Bean 定义(以及更多):
<bean class="com.mypackage.ServiceClass" id="service">
<property name="someBoolean" value="false"/>
<property name="otherBoolean" value="false"/>
<property name="someList">
<list><value>withOneValue</value></list>
</property>
</bean>
<jpa:repositories base-package="com.mypackage"/>
我试过的:
@Qualifier("service")
- 选中
- 选中
- 在 xml 中添加了
<component-scan>
,在ServiceClass
中添加了 - 在
TestClass
上添加了
@Service/@Component
@ComponentScan
这个项目中的问题(此处未提及)是自动装配 bean 中的 <tx:annotation-driven/>
标记和 @Transactional
注释。此注解通常使用 java interface-based-proxy 不能自动装配,因为它们与 class 不是同一类型。
为了解决这个问题,我们使用了标签 <tx:annotation-driven proxy-target-class="true"/>
。
非常感谢这个回答: