java - Maven故障安全插件和spring无法加载bean

标签 java spring maven maven-failsafe-plugin

我正在尝试使用 spring 支持和 mave 故障安全插件运行一个简单的集成测试。看来故障安全插件似乎没有按照预期尊重 ContextConfiguration,因此它无法找到用于依赖注入(inject)的相关 bean。更具体地说,我有以下简单的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:test-context.xml"})
public class MyIntegrationJUnitIT {

    @Autowired
    private MyBean bean;

    @Test
    public void myTest() throws Exception {
       // logic
    }
}

在我的测试上下文中,我声明 bean“MyBean”

我的故障安全插件在许多网站中都演示如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.plugin}</version>
<configuration>
    <encoding>${project.build.sourceEncoding}</encoding>
    <includes>
        <include>**/*IT.java</include>
    </includes>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>integration-test</goal>
            <goal>verify</goal>
        </goals>
    </execution>
</executions>
</plugin>

问题是,当我尝试按以下方式执行此操作时,它会失败:

mvn clean verify

当我将其作为简单的 JUnit 测试运行时,它工作正常

我错过了什么?

谢谢

编辑

测试上下文是空的,供将来使用,它只包含我的示例 bean:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans          
   http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean name="myBean" class="com.thomas.MyBean"/> 

</beans>

我的故障安全插件版本是2.17

错误:

-------------------------------------------------------
T E S T S
-------------------------------------------------------
log4j:WARN No appenders could be found for logger     
(org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Running com.thomas.test.MyIntegrationJUnitIT
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.377 sec <<< FAILURE! -   in com.thomas.test.MyIntegrationJUnitIT
myTest(com.thomas.test.MyIntegrationJUnitIT)  Time elapsed: 0.373 sec  <<< ERROR!
org.springframework.beans.factory.BeanCreationException: Error creating bean with name     'com.thomas.test.MyIntegrationJUnitIT': Injection of autowired dependencies failed; nested     exception is org.springframework.beans.factory.BeanCreationException: Could not autowire     field: private com.thomas.test.MyBean; nested exception is     org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type    [com.thomas.test.MyBean] 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)}
at    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:376)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:113)
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:85)
at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:54)
at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:134)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

Results :

Tests in error: 
  MyIntegrationJUnitIT.myTest » BeanCreation Error creating bean with name 'c...

  Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

最佳答案

终于我找到了问题所在,如果有人觉得有趣,我会简要解释一下

情况是,我的结构中有一个单独的模块,我必须专门声明资源和 testResource 标记,以便能够获取 xml 文件,并且 ContextConfiguration 能够加载我声明的应用程序上下文。棘手的部分是,错误与文件不存在无关,而是无法 Autowiring 我正在注入(inject)的 bean 的属性。希望对您有帮助

托马斯

关于java - Maven故障安全插件和spring无法加载bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940304/

相关文章:

java - apache flink 无法解析导入

java - 注解@SequenceGenerator和编译错误

java - 执行一个简单的 mapreduce 函数以在 Hadoop 的日志文件中搜索字符串

java - 为我的 servlet 使用配置 sqlite 数据库路径的正确方法是什么?

java - Spring REST - 验证原始 GET 请求参数

spring - JMX 连接到 VirtualBox 上的 tomcat

java - 为什么 Java 中的移动文件操作不能提供可靠的结果?

java - 响应为空

maven - 如何配置aspectj以获得编译后编织(使用maven)?

javax.persistence.PersistenceException : No Persistence provider for EntityManager named