web-dev-qa-db-ja.com

springすべてのクラスで@DirtiesContextを使用する必要があります

いくつかの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)

各テストクラスで?

ありがとう

19
jpprade

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

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

キャッシングの詳細はすべて documentation にあります。

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

あなたは絶対に積極的にそれを必要とするテストでのみそれを使う方が良いです。すべてのテストで@DirtiesContextを使用すると、実行速度が非常に遅くなり、見返りに何も得られません。

30
geoand