Java-project: kan ApplicationContext niet laden

Ik heb een Java-project waarin ik een eenvoudige JUNIT-testcase schrijf. Ik heb het bestand applicinoContext.xml gekopieerd naar de root-java-bronmap. Ik heb het geprobeerd met enkele van de aanbevolen instellingen die ik hier op StackOverflow heb gelezen, maar krijg nog steeds dezelfde foutmelding. Komt deze fout doordat mijn project een Java-project is en GEEN webproject, of maakt dat zelfs uit? Ik weet niet zeker waar ik fout ga.

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);
        }
    }
}

Antwoord 1, autoriteit 100%

Het lijkt erop dat je maven (src/main/java)gebruikt. Plaats in dit geval het bestand applicationContext.xmlin de directory src/main/resources. Het zal gekopieerd worden in de classpath directory en je zou er toegang toe moeten hebben met

@ContextConfiguration("/applicationContext.xml")

Uit de Spring-Documentation: Een gewoon pad, bijvoorbeeld “context.xml”, wordt behandeld als een klassepadbron van hetzelfde pakket waarin de testklasse is gedefinieerd. Een pad dat begint met een schuine streep wordt behandeld als een volledig gekwalificeerde classpath-locatie, bijvoorbeeld “/org/example/config.xml”.

Het is dus belangrijk dat u de schuine streep toevoegt wanneer u naar het bestand in de hoofdmap van het klassenpad verwijst.

Als je met het absolute bestandspad werkt, moet je ‘file:C:…’ gebruiken (als ik de documentatie goed begrijp).


Antwoord 2, autoriteit 11%

Ik had hetzelfde probleem en ik gebruikte de volgende plug-in voor 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>

De test liep prima in de IDE (eclipse sts), maar mislukte bij het gebruik van het commando mvn test.

Na veel vallen en opstaan, bedacht ik dat de oplossing was om parallelle tests te verwijderen, de volgende twee regels uit de bovenstaande plug-inconfiguratie:

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

Ik hoop dat dit iemand helpt!


Antwoord 3, autoriteit 4%

Ik heb met dit probleem te maken gehad omdat during bootstrapping my spring project
met behulp van de klasse die ApplicationListener<ContextRefreshedEvent>implementeert en binnen de functie onApplicationEventhet genereert een uitzondering

zorg er dus voor dat de bootstrap-punten van uw toepassing geen uitzondering veroorzaken

in mijn geval gebruikte ik de maven Surefire-plug-invoor het testen dus gebruik deze opdracht om het testproces te debuggen

mvn -Dmaven.surefire.debug test

Antwoord 4

Ik heb met dit probleem te maken gehad en toen werd een Boon (@Bean) niet correct geïnstantieerd omdat deze niet de juiste parameters kreeg in mijn testklasse.

Other episodes