Настройка MockHttpServletRequest в тесте модульного контроллера

Я пытаюсь присоединить параметр к сеансу с помощью MockHttpServletRequest, но объявляю только атрибут в моем тесте. Я получаю следующую ошибку:

Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

Я пробовал добавить <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>, например, по этой ссылке: Получение ошибки" Запрос, привязанный к потоку ", не найден весной в моем веб-приложении

Код теста:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = WebContextLoader.class, classes = { TestApplicationWebContext.class })
public class ClienteControllerTest {

private MockMvc mockMvc;

@Resource
private WebApplicationContext webApplicationContext;

@Autowired
private org.springframework.mock.web.MockHttpServletRequest request;

@Before
public void inicializacao() {
    mockMvc = MockMvcBuilders.webApplicationContextSetup(webApplicationContext).build();
}

@Test
public void teste() throws Exception {
    mockMvc.perform(get("/administracao/cliente")).andExpect(status().isOk()).andExpect(forwardedUrl("administracao-cliente/index"));
}

}

Кто-нибудь может мне помочь?


person Danilo M.    schedule 25.06.2013    source источник


Ответы (1)


Настройка прослушивателя в web.xml не повлияет на интеграционные тесты со средой Spring MVC Test, поскольку эти тесты выполняются вне контейнера сервлетов.

Я, очевидно, не видел кода контроллера, который вы пытаетесь протестировать, но если вы можете перейти на Spring 3.2, я считаю, что это должно работать из коробки благодаря ServletTestExecutionListener, который зарегистрирован по умолчанию. Это работает вместе с поддержкой новой аннотации @WebAppConfiguration, представленной в Spring 3.2. См. Примеры в справочное руководство.

Если это не сработает для вас, попробуйте создать тестовый пример, воспроизводящий ошибку и / или открытие проблемы JIRA с более подробным описанием вашей проблемы.

Ваше здоровье,

Сэм

person Sam Brannen    schedule 26.06.2013
comment
Я использую Spring 3.1, в настоящий момент проект, над которым я работаю, не может обновиться до Spring 3.2, есть ли способ сделать это с помощью версии 3.1? Спасибо. - person Danilo M.; 26.06.2013