Модульное тестирование веб-приложения Spring MVC: Не удалось автоматически подключить поле: private javax.servlet.ServletContext - PullRequest
11 голосов
/ 19 сентября 2011

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

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

@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;

    ... 
}

Ответы [ 2 ]

25 голосов
/ 21 сентября 2011

Согласно подсказке ptomli , определяющей бин MockServletContext, добиваться цели.

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

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

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>
10 голосов
/ 24 сентября 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...