22

私はSpringJUnit4ClassRunner統合テストを書くためにを使用します。@DirtiesContextまた、コンテキストを壊れた状態のままにして、問題なく機能するテストにも使用します。

しかし今、私は静的初期化子に重要なSystemPropertyを設定するテストを行いました。これは、Springコンテキストで使用されます。これは、テストが単独で実行される場合にも正常に機能します。しかし、他のテストでテストを実行すると、Springコンテキストはそのプロパティセットなしですでに作成されており、新しいテストで再利用されます。

テストでSpringコンテキストを強制的に作成し、変更されたシステムプロパティを使用するにはどうすればよいですか?

4

3 に答える 3

23

Spring 4.2以降、DirtiesContextアノテーションは、BEFORE_CLASSBEFORE_EACH_TEST_METHOD、およびBEFORE_METHODの新しいフェーズをサポートします。したがって、たとえば次のことができます。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
public class MyTest {
   ..
}
于 2015-08-08T08:47:16.243 に答える
17

春前4.2:

残念ながら、ハックを提案することしかできません。その通りです。キャッシュされたアプリケーションコンテキストを使用するのではなく、新しいアプリケーションコンテキストを初期化する簡単な方法はないようです。これらは私が提案できるいくつかの回避策です:

  1. 少し異なる方法を使用します@ContextConfiguration-これを行うための迅速で汚い方法は@ActiveProfiles、テストクラスにアノテーションを追加することです。この方法では、Springは新しいキーでコンテキストをキャッシュするか、既存の構成でダミーコンテキストをインポートとして定義します。

  2. ハックですが、JUnit 4.11+では、テストメソッドの順序をある程度制御できます。ターゲットテストメソッドの直前にテストメソッドを設定し、ダミーのテストメソッドに注釈を付けることができ@DirtiesContextます。これにより、ターゲットメソッドがフレッシュと呼ばれる場合に使用できます。コンテキストが作成されます。

于 2013-01-11T12:22:08.040 に答える
1

いくつかのオプションがあります:

  1. 別の構成をロードすることにより、このテストの個別のSpringコンテキストを作成できます。そうすれば、テストは他のすべてのテストから完全に独立します。
  2. このテスト用に簡略化された構成を作成できます。それは同じことを達成しますが、より速くなります。
  3. このテストを最初に実行するテストスイートを作成します。
于 2013-01-11T12:47:18.673 に答える