Я постараюсь ответить на некоторые из ваших вопросов.
О модульном тестировании контроллеров, иногда я обнаруживал, что необходимо добавить запрос и ответ Spring Mock, так как некоторые функции Spring ожидают запрос и ответ вконтекст запроса.
class MyTest {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@BeforeMethod(alwaysRun = true)
public void setup() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
controller = new Controller( /*inject dependencies here*/ );
}
}
Это легко понять, потому что, если их там нет, вы получите очень конкретную ошибку о том, что запрос или ответ не в контексте.
к модели я обнаружил, что проще вернуть ModelAndView и добавить несколько тестов, которые проверяют выходные параметры и имя представления.
public void shows_xxx_index_view {
assertThat(modelAndView.getViewName(), equalTo("controller/index"));
}
public void model_contains_search_results {
assertThat(modelAndView.getModelMap().get("searchResults"), equalTo(expected_results));
}
И я не знаю, перезаписывается ли модель.
Это мой опыт небольшого проекта, поэтому я ни в коем случае не эксперт, но я нашел этот подход полезным.