1. ホーム
  2. spring

[解決済み] SpringアプリケーションのコンテキストをJunitのテストクラスで再利用する

2023-02-03 09:47:32

質問

JUnitのテストケース(統合テスト)の束があり、それらは論理的に異なるテストクラスにグループ化されています。

Springアプリケーションのコンテキストをテストクラスごとに一度ロードし、JUnitテストクラス内のすべてのテストケースでそれを再利用することができます。 http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html

しかし、私たちはちょうど、たくさんのJUnitテストクラスに対して一度だけSpringアプリケーションコンテキストをロードする方法があるかどうか疑問に思っていました。

参考までに、私たちは Spring 3.0.5 と JUnit 4.5 を使用し、プロジェクトをビルドするために Maven を使用しています。

どのように解決するのですか?

はい、これは完全に可能です。あなたがしなければならないことは、同じ locations 属性を使用するだけです。

@ContextConfiguration(locations = "classpath:test-context.xml")

Springはアプリケーションのコンテキストを locations 属性でキャッシュされるので、もし同じ locations が2回目に現れた場合、Springは新しいコンテキストを作成するのではなく、同じコンテキストを使用します。

この機能については、記事を書きました。 Springの統合テストを高速化する . また、Springのドキュメントにも詳しく書かれています。 9.3.2.1 コンテキスト管理とキャッシング .

これには興味深い含意があります。SpringはJUnitがいつ終了したかを知らないので、すべてのコンテクスト を永遠に をキャッシュし、JVMシャットダウンフックを使用してそれらを閉じます。この動作は(特に、多くのテストクラスで異なる locations を持つ多くのテストクラスがある場合は特に)この動作は、過剰なメモリ使用やメモリリークなどを引き起こすかもしれません。コンテキストをキャッシュすることのもう一つの利点です。