Spring MVC: тестируется определенный аннотированный метод - PullRequest
2 голосов
/ 07 октября 2011

Как в Spring MVC 3.0 как проверить, что конкретный метод вызывается?

Например, у меня есть этот метод контроллера:

public class myController {
    @RequestMapping(value = "/create", method = RequestMethod.GET)
    public ModelAndView create(ModelMap map) {
            map.put("category", new Category());
            return new ModelAndView("views/someView", map);
        }
}

Как проверить, что этот create() метод вызывается, когда кто-то запрашивает http://example.com/create url.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

В модульных тестах вы должны только тестировать код Java вашего контроллера без использования какой-либо технологии сервлетов.

В интеграционных тестах вы можете сделать одну из следующих вещей:

Используйте пакет org.springframework.mock.web в артефакте весеннего теста, который содержит Mock Objects для запроса, ответа и servletContext для запуска поддельных запросов на ваших контроллерах и чтения данных из поддельных ответов.

Или используйте среду веб-тестирования, такую ​​как Selenium, которая работает против развернутого веб-приложения.

1 голос
/ 08 октября 2011

Как проверить, что этот метод create () вызывается, когда кто-то запрашивает http://example.com/create url.

Выглядит как интеграционный тест. Шон Патрик Флойд уже упомянул несколько способов как это проверить, но, насколько я понимаю, ни один из этих вариантов не проверяет, действительно ли запрос к URL действительно вызывает метод. - Способ насмешки имитирует запрос, а тест на селен проверяет только возвращаемое значение, но не Invocation. - Не поймите меня неправильно, я считаю, что эти два других теста в большинстве случаев лучше (проще тестировать и даже более достоверны результаты теста), но если вы действительно хотите протестировать вызов, я бы предложил это решение.

Используйте среду веб-тестирования, такую ​​как Selenium (или Selenium 2 / Webdriver), или только простую, которая генерирует только HTTP-запросы. - Для этого вам нужно проклясть развернутое приложение. - так что это действительно интеграционный тест.

Чтобы проверить, что метод вызывается. Я бы порекомендовал использовать инструмент регистрации (Log4J). Затем используйте такой инструмент, как AspectJ или Spring AOP Support, чтобы добавить операторы журналирования в метод контроллера. Ведение журнала должно быть записано в какой-либо регистратор, который записывает в другое место назначения, чем другие используемые вами регистраторы.

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

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