Подтвердить что ты не робот

Тестирование модулей Spring Веб-приложение MVC: не удалось создать поле autwire: private javax.servlet.ServletContext

Я хотел бы сделать тесты для своего веб-приложения, но сбой конфигурации контекста на autowiring servletContext. Ошибка ниже. Autowiring servletContext работает хорошо, когда я запускаю веб-приложение на tomcat/jetty.

java.lang.IllegalStateException: Не удалось загрузить ApplicationContext... Причина: org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean с именем "testController": инжекция автоспуска зависимости не удались; вложенное исключение org.springframework.beans.factory.BeanCreationException: не удалось поле autowire: частный javax.servlet.ServletContext com.test.controllers.TestController.servletContext; вложенное исключение is org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет соответствие bean типа [javax.servlet.ServletContext] найдено для зависимость: ожидается как минимум 1 bean, которая квалифицируется как autowire кандидат на эту зависимость. Аннотации зависимостей: {@Org.springframework.beans.factory.annotation.Autowired(обязательно = истина)}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class FirstTest {

    @Test
    public void doTest() throws Exception {
        // ...  
    }
}

TestController

@Controller
public class TestController {

    @Autowired
    private ServletContext servletContext;

    ... 
}
4b9b3361

Ответ 1

В соответствии с подсказкой ptomli определение MockServletContext bean делает трюк.

<bean class="org.springframework.mock.web.MockServletContext"/>

Другая проблема, которая появилась, была tilesConfigurer, которая не работает:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException

Soultion: отдельная конфигурация плитки из applicationContext.xml и не использовать плитки в тестах jUnit.

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
            classpath:tilesConfig.xml
        </param-value>
    </context-param>
</web-app>

Ответ 2

Я добавил @WebAppConfiguration в тестовый класс, и проблема исчезла