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"/>

我试过的:

这个项目中的问题(此处未提及)是自动装配 bean 中的 <tx:annotation-driven/> 标记和 @Transactional 注释。此注解通常使用 java interface-based-proxy 不能自动装配,因为它们与 class 不是同一类型。

为了解决这个问题,我们使用了标签 <tx:annotation-driven proxy-target-class="true"/>

非常感谢这个回答: