24

私はいくつかのjunitテストを持っていますが、

@ContextConfiguration(locations = { "file:../business/src/test/resources/application-context-test.xml",
        "file:src/main/webapp/WEB-INF/confA.xml", "classpath:/mvc-dispatcher-servlet-test.xml"})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class ProductContentControllerTest {
...
}

クラス内では、すべてのテストを同じコンテキストで実行する必要があります (これは事実です)。

しかし、すべてのテスト クラスを独立させたいと考えています。これがデフォルトの動作だと思っていたのですが、すべてのテストを一緒に実行すると、実行速度が速すぎるようです。

それはどのように機能しますか?アプリケーション コンテキストは、テスト クラスごとに 1 回だけ開始されますか?

追加する必要があります: @DirtiesContext(classMode= ClassMode.AFTER_CLASS)

各テストクラスで?

ありがとう

4

1 に答える 1

36

Spring は、テストの実行時にデフォルトでアプリケーション コンテキストをキャッシュします。Spring がキャッシュに使用するキーは、次のもので構成されます。

  • 場所 (@ContextConfiguration から)
  • クラス (@ContextConfiguration から)
  • contextInitializerClasses (@ContextConfiguration から)
  • contextLoader (@ContextConfiguration から)
  • activeProfiles (@ActiveProfiles から)
  • resourceBasePath (@WebAppConfiguration から)

キャッシュのすべての詳細については、ドキュメントを参照してください。

@DirtiesContext私の経験では、 Spring にコンテキストを強制的に再作成させるためにを使用する必要はほとんどありません。私はこれが必要な状況にあまり遭遇していません。簡単に頭に浮かぶ唯一の状況は、共有キャッシュ マネージャーの使用です。

絶対に必要なテストでのみ使用することをお勧めします。すべてのテストで使用すると、実行速度が非常に遅くなり@DirtiesContext、見返りが得られません。

于 2014-08-18T10:26:38.217 に答える