junit контекст веб-приложения не найден: не зарегистрирован прослушиватель ContextLoad?

Я пытаюсь написать тестовые примеры для моего приложения structs, в котором некоторые конфигурации в xml-файлах на основе пружин. я переместил все мои файлы applicationContext в путь класса src/test/resources, но когда я запускаю свой тестовый класс (RunAs-> Junit Test), он выдает ошибку ниже

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
    at org.springframework.web.context.support.WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplicationContextUtils.java:90)
    at com.cisco.attrui.test.BundleSearchActionTest.getPidBTSplitPctSearchTest(BundleSearchActionTest.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

person Viswanathan    schedule 08.12.2017    source источник


Ответы (2)


Похоже, такая же проблема, как и в другом сообщении, на которое я недавно ответил здесь: JUnit 4.12: тестирование служебных классов

Перемещения конфигураций xml в путь к классам недостаточно. Вам нужно указать Spring, какие из них использовать, и в первую очередь вам нужно использовать Spring test runner.

Как это:

@ContextConfiguration(locations = {"/integrationContextTest.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class TdkSMSSenderTest  {
}
person Igand    schedule 08.12.2017
comment
@ContextConfiguration(locations ={classpath:applicationContexttest-service.xml,classpath:applicationContexttest-dao.xml}) @RunWith(SpringJUnit4ClassRunner.class) у меня есть xml-файлы в пути к классам, и они вызываются .. но я думаю, что в моем Интернете. xml ‹listener-class›org.springframework.web.context.ContextLoaderListener‹/listener-class› он не вызывается на этапе тестирования, пожалуйста, дайте мне знать, как его можно вызвать/настроить для выполнения тестов - person Viswanathan; 11.12.2017
comment
Ага - в моих тестах web.xml не имеет значения во время тестов - контексты загружаются классами поддержки тестов Spring, ServletContextListener не требуется. Я загружаю контекст, проверяю bean-компонент, вызываю его метод, утверждаю. Я вижу, что есть этот @WebAppConfiguration docs.spring.io /spring/docs/current/spring-framework-reference/ , который включает в себя загрузку контекстов веб-приложения, но у меня нет опыта его использования. - person Igand; 11.12.2017

Если файлы находятся в src/test/resources, вы можете добавить аннотацию @ContextConfiguration к вашему тестовому классу, чтобы получить столько файлов, сколько требуется, предоставив их в массиве следующим образом:

@ContextConfiguration(locations = {"classpath:one-file.xml","classpath:another-file.xml", "classpath:and-another-file.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
person Omoro    schedule 08.12.2017
comment
Да, я использую приведенный выше шаблон, и файлы xml вызываются ... но он говорит, что не зарегистрирован ContextLoaderListener ... который является классом прослушивателя, упомянутым в файле Web.xml AS ниже, я думаю, что здесь происходит сбой при вызове во время test-pahse ‹ listener› ‹listener-class›org.springframework.web.context.ContextLoaderListener‹/listener-class› ‹/listener› - person Viswanathan; 11.12.2017