web-dev-qa-db-fra.com

Java Project: échec du chargement d'ApplicationContext

J'ai un projet Java dans lequel j'écris un scénario de test JUNIT simple. J'ai copié le fichier applicatinoContext.xml dans le répertoire racine Java source. I 'ai essayé avec certains des paramètres recommandés que j'ai lus ici sur StackOverflow mais j'obtiens toujours la même erreur. Cette erreur se produit-elle parce que mon projet est un projet Java et PAS un projet Web , ou est-ce même important? Je ne sais pas où je vais mal.

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

On dirait que vous utilisez maven (src/main/Java). Dans ce cas, mettez le applicationContext.xml fichier dans le src/main/resources répertoire. Il sera copié dans le répertoire classpath et vous devriez pouvoir y accéder avec

@ContextConfiguration("/applicationContext.xml")

À partir de Spring-Documentation : Un chemin simple, par exemple "context.xml", sera traité comme une ressource de chemin de classe du même package dans lequel la classe de test est défini . Un chemin commençant par une barre oblique est traité comme un emplacement de chemin de classe complet , par exemple "/org/example/config.xml".

Il est donc important d'ajouter la barre oblique lors du référencement du fichier dans le répertoire racine du chemin de classe.

Si vous travaillez avec le chemin de fichier absolu, vous devez utiliser 'file: C: ...' (si je comprends bien la documentation).

27
FrVaBe

J'ai eu le même problème et j'utilisais le plugin suivant pour les tests:

<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>

Le test fonctionnait bien dans le IDE (m Eclipse), mais a échoué lors de l'utilisation de la commande test mvn.

Après beaucoup d'essais et d'erreurs, j'ai pensé que la solution était de supprimer les tests parallèles, les deux lignes suivantes de la configuration du plugin ci-dessus:

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

J'espère que cela aide quelqu'un!

3
Matyas

J'ai rencontré ce problème car during bootstrapping my spring project en utilisant la classe qui implémente ApplicationListener<ContextRefreshedEvent> et à l'intérieur de la fonction onApplicationEvent il lève une exception

assurez-vous donc que votre application bootstrap points ne lève aucune exception

dans mon cas, j'utilisais plugin maven surefire pour les tests, donc pour déboguer le processus de test, utilisez cette commande

mvn -Dmaven.surefire.debug test
1
Basheer AL-MOMANI