Проект 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