Модульный тест для контроллеров Spring MVC, использующих аннотацию @RequestParam - PullRequest
2 голосов
/ 05 ноября 2010

Как создать модульный тест для контроллеров Spring MVC, использующих аннотацию @RequestParam?Я создал тесты junit для контроллера, который использует объект HttpServletRequest в методе handlerequest, но я ищу способ протестировать контроллер с помощью @ RequestParam.

Спасибо

@RequestMapping("/call.action")

public ModelAndView getDBRecords(@RequestParam("id") String id) {

   Employee employee = service.retrieveEmployee(id);

} 

Ответы [ 4 ]

11 голосов
/ 05 ноября 2010

Одной из прелестей этого стиля контроллера является то, что вашим модульным тестам не нужно беспокоиться о механике отображения запросов.Они могут просто тестировать целевой код напрямую, без перебора объектов запроса и ответа.

Так что пишите свой модульный тест, как если бы это был просто любой другой класс, и игнорируйте аннотации.Другими словами, вызовите getDBRecords() из вашего теста и передайте аргумент id.Помните, что вам не нужно самому тестировать Spring, вы можете предположить, что он работает.

Существует еще один класс тестов («функциональных» или «приемочных» тестов), который тестирует приложение после его тестирования.развернут (используя, например, WebDriver, Selenium, HtmlUnit и т. д.). Это - это место для проверки того, что ваши картографические аннотации выполняют свою работу.

0 голосов
/ 28 сентября 2016

Попробуйте в качестве теста!

@Test
    public void testgetDBRecords(){
      MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
      mockMvc.perform(get("/call.action?id=id1234").andExpect(status().isOk())
    }
0 голосов
/ 30 октября 2015

Использовать интеграционный тест (интеграционное тестирование Google Spring MVC)

Вроде это

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.SpringApplicationContextLoader;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = YourApplication.class, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class SampleControllerTest {

    @Value("${local.server.port}")
    protected int port;

    @Autowired
    protected WebApplicationContext context;

    private RestTemplate restTemplate = new RestTemplate();

    @Test
    public void returnsValueFromDb() {
        // you should run mock db before
        String id = "a0972ca1-0870-42c0-a590-be441dca696f";
        String url = "http://localhost:" + port + "/call.action?id=" + id;

        ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);

        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());

        String body = response.getBody();

        // your assertions here
    }

}
0 голосов
/ 02 декабря 2010

Или вы можете использовать _request = new MockHttpServletRequest ();

и _request.setAttribute ("key", "value");

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