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
または両方に同じ効果を入れてみました。
これは、Spring統合テストを実行するときのデフォルトの動作です。
リファレンスドキュメントから
@ ContextConfigurationアノテーションから場所と値の属性の両方を省略した場合、TestContextフレームワークはデフォルトのXMLリソースの場所を検出しようとします。具体的には、GenericXmlContextLoaderとGenericXmlWebContextLoaderは、テストクラスの名前に基づいてデフォルトの場所を検出します。クラスの名前がcom.example.MyTestの場合、GenericXmlContextLoaderは「classpath:com/example/MyTest-context.xml」からアプリケーションコンテキストをロードします。
そのため、Maven、log4j、またはリソースフォルダーの配置/支援には一切関係ありません。
これらのメッセージについて心配する必要がありますか?
まったくそうではありません。
ただし、これらのメッセージはまだイライラします
このチェックをオフにするかどうか、またどのようにオフにするかがわかりません(もちろん、ログレベルをAbstractContextLoader
からWARN
に変更することでチェックを解除できます)。
AnnotationConfigContextLoader
を@Configuration.
と組み合わせて使用できます
詳細は こちら を参照してください。
ローダーのより具体的な設定でテストクラスに注釈を付け、Java Configを使用できます。
何かのようなもの:
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes = ScalaTestConfig.class)
ScalaTestConfigクラスには次の注釈が付けられています。
@Configuration
@ComponentScan(basePackages = {"***", "***"})
クラサンガーのリンクに基づいています。