web-dev-qa-db-ja.com

Spring Integration Testing:デフォルトのリソースの場所を検出できませんでした

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を使用しています。クラスパスで春のセキュリティ用に2つの構成クラスがあります。

main/resourcesフォルダーには、application.propertiesファイルとlog4j2.xmlがあります。 test/resourcesフォルダーはありませんが、main/resourcesフォルダーをtest/resourcesにコピーすると、上記のログメッセージが表示されます。

PDATE 2:問題を再現しようとする小さなサンプルアプリケーションを作成しましたが、log4j2.xmlファイルをリソースフォルダーに配置するとすぐに、前述のログ出力が表示されるようです。 src/mainまたはsrc/testまたは両方に同じ効果を入れてみました。

9
lanoxx

これは、Spring統合テストを実行するときのデフォルトの動作です。

リファレンスドキュメントから

@ ContextConfigurationアノテーションから場所と値の属性の両方を省略した場合、TestContextフレームワークはデフォルトのXMLリソースの場所を検出しようとします。具体的には、GenericXmlContextLoaderとGenericXmlWebContextLoaderは、テストクラスの名前に基づいてデフォルトの場所を検出します。クラスの名前がcom.example.MyTestの場合、GenericXmlContextLoaderは「classpath:com/example/MyTest-context.xml」からアプリケーションコンテキストをロードします。

そのため、Maven、log4j、またはリソースフォルダーの配置/支援には一切関係ありません。

これらのメッセージについて心配する必要がありますか?

まったくそうではありません。

ただし、これらのメッセージはまだイライラします

このチェックをオフにするかどうか、またどのようにオフにするかがわかりません(もちろん、ログレベルをAbstractContextLoaderからWARNに変更することでチェックを解除できます)。

8
Ori Dar

AnnotationConfigContextLoader@Configuration.と組み合わせて使用​​できます

詳細は こちら を参照してください。

3
abhi

ローダーのより具体的な設定でテストクラスに注釈を付け、Java Configを使用できます。

何かのようなもの:

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

ScalaTestConfigクラスには次の注釈が付けられています。

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

クラサンガーのリンクに基づいています。

0
AlexGera