Проект Java: не удалось загрузить ApplicationContext

У меня есть Java-проект, в котором я пишу простой тестовый пример JUNIT. Я скопировал файл applicationatinoContext.xml в корневой каталог источника java. Я пробовал его с некоторыми из рекомендуемых параметров, которые я читал здесь, в StackOverflow, но все равно получаю ту же ошибку. Произошла ли эта ошибка из-за того, что мой проект был проектом Java, а не веб-проектом, или это даже имеет значение? Я не уверен, где я ошибаюсь.

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

Ответ 1

Похоже, вы используете maven (src/main/java)). В этом случае поместите файл applicationContext.xml в каталог src/main/resources. Он будет скопирован в каталог пути к классам и вы сможете получить к нему доступ с помощью

@ContextConfiguration("/applicationContext.xml")

Из Spring -Documentation: простой путь, например, "context.xml", будет рассматриваться как ресурс classpath из того же пакет, в котором определяется тестовый класс. Путь, начинающийся с косой черты, рассматривается как полнофункциональное расположение пути к классам, например "/org/example/config.xml".

Поэтому важно добавить косую черту при ссылке на файл в корневом каталоге пути к классам.

Если вы работаете с абсолютным пути к файлу, вам нужно использовать "файл: C:..." (если я правильно понимаю документацию).

Ответ 2

У меня была та же проблема, и я использовал следующий плагин для тестов:

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

После большого количества проб и ошибок я решил, что решение состоит в том, чтобы удалить параллельное тестирование, следующие две строки из конфигурации плагина выше:

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

Надеюсь, что это поможет кому-то!

Ответ 3

Я столкнулся с этой проблемой, потому что during bootstrapping my spring project используя класс, реализующий ApplicationListener<ContextRefreshedEvent> и внутри onApplicationEvent функцию , он выдает исключение

поэтому убедитесь, что точки загрузки bootstrap не генерируют никаких исключений.

в моем случае я использовал maven surefire plugin для тестирования, чтобы отладить процесс тестирования с помощью этой команды

mvn -Dmaven.surefire.debug test