Модульные тесты Spring MVC - можно ли передать URL (с параметрами) в контроллер? - PullRequest
1 голос
/ 03 апреля 2012

Я собираюсь протестировать контроллер Spring MVC (или весь сайт, если это возможно).

Я хочу передать URL (в виде строки), например, "/ metrics / filter? a1 = 1 & a2 = 2 & a3 = abcdefg & misParam = WRONG" и проверьте, какой контроллер вернет.

Есть ли простой способ сделать это?

Пример:

 @RequestMapping(value = {"/filter"}, method = RequestMethod.GET)
    @ResponseBody
    public List<MetricType> getMetricTypes(
             @RequestParam(value = "subject", required = false) Long subjectId
            ,@RequestParam(value = "area", required = false) Long areaId
            ,@RequestParam(value = "onlyImmediateChildren", required = false) Boolean onlyImmediateChildren

            ,@RequestParam(value = "componentGroup", required = false) Long componentGroupId

            ,@RequestParam(value = "hasComponentGroups", required = false) Boolean hasComponentGroups
                                            ) throws Exception
    {
          //some code
    }

Большое спасибо

Максим

ОБНОВЛЕНО

  • Я использую только GET, а не пост
  • Я не использую объекты модели (см. Пример выше)
  • Моя система представляет собой веб-сервис, который имеет множество методов "/ someEntity / filter? A1 = 123 & a2 = 1234 & a3 = etc" с различными комбинациями параметров. Я не уверен, что в этом случае целесообразно использовать объекты модели.

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012
@RunWith( SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:WebRoot/WEB-INF/path/to/your-context.xml") 
public class YourControllerTest {

    private MockHttpServletRequest request;
    private MockHttpServletResponse response;
    private AnnotationMethodHandlerAdapter adapter;


@Before
public void setUp(){
    this.request = new MockHttpServletRequest();
    this.response = new MockHttpServletResponse();
    this.adapter = new AnnotationMethodHandlerAdapter();
}


    @Test
    public void getMetricTypes() throws Exception{



        request.setRequestURI("/filter");
        request.setMethod("GET");
        request.setParameter("subject", "subject");
        request.setParameter("area", "area");    
        request.setParameter("onlyImmediateChildren", "onlyImmediateChildren");    
        request.setParameter("componentGroup", "componentGroup");    
        request.setParameter("hasComponentGroups", "hasComponentGroups");    

        ModelAndView mav = adapter.handle(request, response, yourController);
        Assert.assertEquals(200, response.getStatus());
        //Assert what you want
    }
}
0 голосов
/ 03 апреля 2012

Новый и более простой способ тестирования контроллеров Spring MVC - spring-test-mvc .

0 голосов
/ 03 апреля 2012

Большинство людей рекомендует не проводить интеграционное тестирование сопоставлений запросов - вы можете тестировать методы pojo ваших контроллеров: т.е. без каких-либо пружинных привязок.Какой смысл проверять, работает ли Spring, и является выдвинутым аргументом.

Таким образом, при вызове модульного теста метод контроллера обычно передает реализацию модели в качестве параметра (extendedmodelmap (?)). Тогда тестовый код можетпроверьте, что добавляется в модель, а также возвращаемые значения.

Если вы действительно хотите провести интеграционный тест spring-mvc , эта статья хороша.

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