5

次のように注釈が付けられた統合テストクラスがあります

@WebAppConfiguration
@ContextConfiguration(classes = {AppConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)    
public class CacheConsumerTest {

}

これが私のAppConfigurationです

@Configuration    
@ComponentScan(basePackages = {"com.etc.etc.etc."})
@EnableWebMvc
public class AppConfiguration {
}

何らかの理由で、すべてのテストの最後に@ComponentBeanが呼び出されません。ただし、テストが実行される前に、開始時に呼び出されます。@PreDestroyCacheConsumerTest@PostConstruct

誰が問題が何であるか知っていますか?私のいくつかは、@Component(@Predestroy を呼び出すことによって) 遮断したいバックグラウンド スレッドです。そうしないと、バックグラウンドで行う作業によって、他のテスト クラスでの後続のテストが失敗します。

追加しようとしまし@DirtiesContext(classMode=ClassMode.AFTER_CLASS) たが、役に立ちませんでした。

編集:問題を理解したので、DirtiesContext を機能させるために追加の手順を実行する必要がありました: Spring @DirtiesContext は Spring コンテキストをリロードしますか?

4

1 に答える 1

8

SpringJUnit4ClassRunner機能があります。開始されたすべてのコンテキストをキャッシュし、すべてのテストケースの実行が終了したときにのみそれらを破棄します。その理由は、新しい Spring コンテキストの開始に数秒かかることが多く、スイート全体に必要な時間が大幅に増加するためです。

したがって、これが本当に必要な場合は、おそらく拡張SpringJUnit4ClassRunnerして、コンテキストをキャッシュしないようにする必要があります。おそらくこのランナーにはすでにそのような機能があると思いますが、残念ながら今は確認できません。そのコードを調べてみてください。それほど複雑ではなく、おそらくすぐに解決策を見つけることができます。

編集:

テスト ケースに で注釈を付けました@DirtiesContext詳細はこちらをご覧ください。

于 2014-03-31T22:16:31.217 に答える