Spring集成测试:无法检测默认资源位置

时间:2016-04-14 12:17:13

标签: java spring spring-boot spring-test

我正在使用Maven的Failsafe插件为我的Spring Boot应用程序运行集成测试。当我创建一个简单的测试时,例如:

@RunWith (SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(App.class)
public class MyTestIT {

    @Test
    public void test() {
        assertTrue (true);
    }
}

然后运行mvn verify我在Spring应用程序启动之前看到了以下日志条目(例如,甚至在Spring Boot标题之前):

Running org.....MyTestIT
2016-04-14 13:25:01.166  INFO ???? --- [           main] 
    or.sp.te.co.su.AbstractContextLoader               : 
    Could not detect default resource locations for test class 
    [org....MyTestIT]: no resource found for suffixes
    {-context.xml, Context.groovy}.
2016-04-14 13:25:01.175  INFO ???? --- [           main] 
    or.sp.te.co.su.DefaultTestContextBootstrapper      : 
    Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
2016-04-14 13:25:01.185  INFO ???? --- [           main] 
    or.sp.te.co.su.DefaultTestContextBootstrapper      : Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@57c758ac, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@a9cd3b1, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@13e39c73, org.springframework.test.context.support.DirtiesContextTestExecutionListener@64cd705f, org.springframework.test.context.transaction.TransactionalTestExecutionListener@9225652, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@654f0d9c]

随后是Spring Boot横幅。然后测试没有任何错误。虽然这些消息以INFO日志级别打印并且测试运行良好,但我猜一切都很好,但我仍然觉得这些消息很烦人。那么我的配置有问题吗? 我应该担心这些消息吗?

即使没有任何错误,我仍然想了解那里发生的事情和消息的含义。

我的maven-failsafe-plugin只是使用默认配置,我的App.java只是一个用@SpringBootApplication注释的简单类。

更新1:

以下是我的测试插件的配置:

  <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <!-- Ignore any tests that are marked by the @IntegrationTest annotation of Spring Boot -->
      <excludedGroups>org.springframework.boot.test.IntegrationTest</excludedGroups>
    </configuration>
  </plugin>

  <plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <executions>
      <execution>
        <id>integration-test</id>
        <goals>
          <goal>integration-test</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

我还配置了spring-boot-starter-test依赖项,我正在使用spring-boot-devtools。除此之外,其他一切都与测试无关。

它自己的项目是非常标准的,使用hibernate和mysql以及web-mvc用于休息端点。我在类传递上有两个Spring安全性配置类。

main/resources文件夹中,我有一个application.properties文件和一个log4j2.xml。没有test/resources文件夹,但是当我将main / resources文件夹复制到test/resources时,仍会显示上述日志消息。

更新2: 我刚刚创建了一个试图重新创建问题的小型示例应用程序,看起来,只要我将log4j2.xml文件放入资源文件夹,就会出现上面提到的日志输出。我尝试将其放在src/mainsrc/test或两者中,效果相同。

3 个答案:

答案 0 :(得分:8)

这是运行Spring集成测试时的默认行为。

参考文献

  
    

如果省略@ContextConfiguration批注中的位置和值属性,TestContext框架将尝试检测默认的XML资源位置。具体来说,GenericXmlContextLoader和GenericXmlWebContextLoader根据测试类的名称检测默认位置。如果您的类名为com.example.MyTest,则GenericXmlContextLoader将从“classpath:com / example / MyTest-context.xml”加载您的应用程序上下文。

  

因此,它与Maven,log4j或资源文件夹的定位/帮助无关。

我应该担心这些消息吗?

显然根本没有。

但我仍然觉得这些消息令人恼火

不知道是否以及如何关闭该检查(您可以通过将AbstractContextLoader的日志级别更改为WARN来消除此问题。)

答案 1 :(得分:3)

您可以将AnnotationConfigContextLoader@Configuration.

结合使用

有关详细信息,请参阅here

答案 2 :(得分:0)

您可以使用更具体的加载配置注释测试类并使用Java Config

类似的东西:

@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = ScalaTestConfig.class)

ScalaTestConfig类的注释位置为:

@Configuration
@ComponentScan(basePackages = {"***", "***"})

基于Kulasangar的链接。