web-dev-qa-db-ja.com

Java Project:ApplicationContextのロードに失敗しました

Javaプロジェクトを作成しています。このプロジェクトでは、簡単なJUNITテストケースを作成しています。applicatinoContext.xmlファイルをルートJavaソースディレクトリにコピーしました。 StackOverflowでここで読んだ推奨設定のいくつかを試してみましたが、それでも同じエラーが発生します。このエラーは、プロジェクトがJavaプロジェクトであり、Webプロジェクトではないために発生していますか? 、それとも重要ですか?どこで間違っているのかわかりません。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"C:/projs/sortation/src/main/Java/applicationContext.xml"})
// Also tried these settings but they also didnt work,
//@ContextConfiguration(locations={"classpath:applicationContext.xml"})
//@ContextConfiguration("classpath:applicationContext.xml")
@Transactional
public class TestSS {

    @Autowired
    private EmsDao dao;

    @Test
    public void getSites() {

        List<String> batchid = dao.getList();

        for (String s : batchid) {
            System.out.println(s);
        }
    }
}
33
Byron

Maven(src/main/Java)。この場合、applicationContext.xmlファイルのsrc/main/resourcesディレクトリ。クラスパスディレクトリにコピーされ、次のコマンドでアクセスできるはずです。

@ContextConfiguration("/applicationContext.xml")

Spring-Documentation から:プレーンパス(「context.xml」など)は、テストクラスと同じパッケージからのクラスパスリソースとして扱われます定義されています。スラッシュで始まるパスは、完全修飾クラスパスの場所、たとえば「/org/example/config.xml」として扱われます。

したがって、クラスパスのルートディレクトリにあるファイルを参照するときは、スラッシュを追加することが重要です。

絶対ファイルパスを使用する場合は、「file:C:...」を使用する必要があります(ドキュメントを正しく理解している場合)。

27
FrVaBe

私は同じ問題を抱えていて、テストには次のプラグインを使用していました。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <useFile>true</useFile>
        <includes>
            <include>**/*Tests.Java</include>
            <include>**/*Test.Java</include>
        </includes>
        <excludes>
            <exclude>**/Abstract*.Java</exclude>
        </excludes>
        <junitArtifactName>junit:junit</junitArtifactName>
        <parallel>methods</parallel>
        <threadCount>10</threadCount>
    </configuration>
</plugin>

テストはIDE(Eclipse sts)で正常に実行されていましたが、コマンドmvn testを使用すると失敗しました。

多くの試行錯誤の後、解決策は並列テストを削除することであると考えました。上記のプラグイン構成から次の2行を削除します。

    <parallel>methods</parallel>
    <threadCount>10</threadCount>

これが誰かを助けることを願っています!

3
Matyas

during bootstrapping my spring projectを実装するクラスを使用するApplicationListener<ContextRefreshedEvent>およびonApplicationEvent関数内で例外をスローするため、この問題に直面しました

そのため、アプリケーションbootstrapポイントが例外をスローしないことを確認してください

私の場合、テストに maven surefire plugin を使用していたので、テストプロセスをデバッグするにはこのコマンドを使用します

mvn -Dmaven.surefire.debug test
1