java - 尝试不同的解决方案后,使用 JUnit4 Runner 进行 Spring 测试不起作用

标签 java junit4 spring-test

当使用 JUnit4 测试运行器 Autowiring 我的 spring 测试类时,上下文启动会产生以下异常:

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"})

Autowiring 字段的注释如下

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

我尝试过的:

最佳答案

此项目中的问题(此处未提及)是 <tx:annotation-driven/>标签和@Transactional Autowiring bean 中的注释。这个注解通常使用java基于接口(interface)的代理,它不能被 Autowiring ,因为它们不是类的同一类型。

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

非常感谢这个答案:https://stackoverflow.com/a/19624412

关于java - 尝试不同的解决方案后,使用 JUnit4 Runner 进行 Spring 测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340945/

相关文章:

junit - 以编程方式生成 JUnit 4 测试

java - JUnit 4.11 在@After 中获取测试结果

java - 用于非 Spring 应用程序的 Junit 测试的嵌入式数据库

spring-boot - 如何通过 SpringBootTest 调试 Spring Boot 应用程序

java - 创建并下载 Excel

java - Android:正则表达式 matcher.find() 的问题始终返回 false

Spring @Transactional 在 JUnit 测试中不起作用?

java - 测试Spring Boot应用程序启动

java - 如何创建每次创建对象时自动递增并在为 "destroyed"时递减

java - 如何使用 barcode4j 生成随机条形码代码?