Хотя возможно imho, это плохая привычка вводить HttpServletResponse
или HttpServletRequest
, как это. Это приведет к странным проблемам и выглядит просто странно или неправильно. Вместо этого используйте аргумент метода типа HttpServletResponse
и используйте Spring MockHttpServletResponse
для тестирования.
Тогда написание модульного теста так же просто, как создание нового экземпляра вашего класса и вызов метода.
public class IndexTest {
private Index index = new Index();
@Test
public void testIndex() throws IOException {
MockHttpServletResponse response = new MockHttpServletResponse();
index.index(response);
// Some assertions on the response.
}
}
Если вы хотите протестировать его как часть более крупного интеграционного теста, вы можете сделать то же самое, но использовать аннотацию @WebMvcTest
.
@RunWith(SpringRunner.class)
@WebMvcTest(Index.class)
public class IndexTest {
@Autowired
private Index index;
@Test
public void testIndex() throws IOException {
MockHttpServletResponse response = new MockHttpServletResponse();
index.index(response);
// Some assertions on the response.
}
}
Или используйте MockMvc
, чтобы проверить его по поддельному запросу
@RunWith(SpringRunner.class)
@WebMvcTest(Index.class)
public class IndexTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testIndex() throws IOException {
mockMvc.perform(get("/")).
andExpect(status().isMovedTemporarily());
MockHttpServletResponse response = new MockHttpServletResponse();
index.index(response);
// Some assertions on the response.
}
}
Вышеприведенный тест также можно записать с использованием @SpringBootTest
, разница в том, что @WebMvcTest
будет только тестировать и загружать веб-фрагмент (т. Е. Материал, связанный с сетью), тогда как @SpringBootTest
фактически запустит все приложение.