1. ホーム
  2. spring

[解決済み] Junit with Spring - TestContextManager [ERROR] TestExecutionListenerを許可する際に例外をキャッチしました。

2022-02-18 07:28:28

質問

Spring-Maven--Hibernate-Mysql runnint on TomcatのWebアプリで、2種類のJunitカテゴリーを使用して2種類のJunit統合テストを実行しています。

  1. LocalTests - プロセス内で実行され(サーバーは不要)、ウェブ層のメソッド(この場合はジャージ)を直接呼び出します。
  2. HttpTests - クライアントをシミュレートし、httpリクエストで私のウェブレイヤーを呼び出します。

各テストクラスの上に、私が持っている

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:testApplicationContext.xml" })

そして、私のテストスイートは次のようになります(これは2つのうちの1つで、各カテゴリーに1つずつあります)。

@RunWith(Categories.class)
@IncludeCategory(HttpTest.class)
@SuiteClasses({ ...All My Test Classes... })
public class HttpSuiteITCase {

    // Excluded: NotificationTests, ImageHttpTests

    /**
     * Run once before any of the test methods.
     */
    @BeforeClass
    public static void setTestsConfigurations() {
    TestConfiguration.setup(false);
    }

私のtestApplicationContextは実際には空で、コンポーネントスキャンだけが含まれています。

<context:component-scan base-package="com.company.app" />

ローカルでテストを実行すると、すべてがスムーズに動作しますが、mt HTTPテストを呼び出すとクラッシュします。

2012-07-22 17:56:13 DefaultListableBeanFactory [INFO] Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2598a35d: defining beans [httpBrandManagerTestsProxy,httpClubTestsProxy,<HERE THERE'S A BUNCH OF SPRING BEANS>,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,contextApplicationContextProvider,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
2012-07-22 17:56:13 TestContextManager [ERROR] Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@29565e9d] to prepare test instance [integrationTests.http.tests.UserLoginDataHttpTests@480d41f3]
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)

いろいろやってみたけどうまくいかない :( testApplicationContextはtest/resourcesフォルダの下にあります。

私は、例外が特定のクラスをマークしていることに気づきました。UserLoginDataHttpTestsです。 しかし、私はこのクラスについて何も特別なものを見ることができません。

よろしくお願いします。

どのように解決するのですか?

この問題が発生するのは Springのコンテキスト で定義されているリスナーの1つよりも前に読み込まれます。 web.xml . は、私自身のリスナーを使用して初期化される、非スプリングクラスを使用するいくつかのビーンズを初期化しています。この問題を解決するには、私のリスナーが最初に実行されるようにする必要があります。