1

によると: https://jira.spring.io/browse/SPR-4103 SpringJUnit4ClassRunner は、テスト後に必ず DisposableBean.destroy を呼び出すとは限りません (*facepalm*!) -- JUnit の実装上の問題が原因です。

これはまだ本当ですか?

次のようにscalaでテストを作成しています:

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[Service1Config]))
class Service1Test {

  @Test
  def test1(): Unit = {
  }

}

@RunWith(classOf[SpringJUnit4ClassRunner])
@WebAppConfiguration
@ContextConfiguration(classes = Array(classOf[Service2Config]))
class Service2Test {

  @Test
  def test2(): Unit = {
  }

}

Service2Test の実行時に、Service1Config の Bean の destroy メソッドが破棄されないことがわかりました。

@After を追加してコンテキストを明示的にシャットダウンすることを推奨する多くの記事を見つけました。これは、エラーが発生するのを待っているように聞こえます (1 つのテストで @After クリーンアップを追加するのを忘れると、次のテスト クラスが失敗し、その理由がわからないため)。

これでも SpringJUnit4ClassRunner/JUnit で実行できない場合、各テストの後にコンテキストのクリーンアップを自動的に呼び出すテスト フレームワークはありますか?

4

1 に答える 1

2

クラスに追加してみる

@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
class Service1Test {

それはトリックを行います。

于 2015-03-04T03:42:06.613 に答える