Не загружается пружинный джунит
Я пытаюсь добавить модульное тестирование для моей весенней загрузки приложения. Это не работает, и выдает 404. Я использую релиз 1.2.1 с пружинной загрузкой и имею зависимости для spring-boot-starter-test. Пожалуйста, дайте знать, если я что-то упустил. Приложение весенней загрузки работает без проблем.
Вот мой код,
public class Application{
public static void main(String[] args) {//NOSONAR
SpringApplication.run(Application.class, args);
}
@Bean
public ServletRegistrationBean displayListServletRegistrationBean(){
return new ServletRegistrationBean(new DisplayServlet(),"/display");
}
@Bean
public ServletRegistrationBean manageServletRegistrationBean(){
return new ServletRegistrationBean(new ManageServlet(),"/manage");
}
}
Мой код теста Junit,
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-test-context.xml"})
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@WebIntegrationTest({"server.port=0", "management.port=0"})
@ActiveProfiles("scratch")
public class ApplicationTest {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setUp() {
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
}
@Test
public void testHome() throws Exception {
this.mvc.perform(get("/display")).andExpect(status().isOk());
//this.mvc.perform(get("/")).andExpect(status().isOk());
}
}
Консоль имеет
org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/display] in DispatcherServlet with name ''
и результат Junit имеет
java.lang.AssertionError: Status expected:<200> but was:<404> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
1 ответ
Решение
Spring MVC Test предназначен только для тестирования запросов, которые обрабатываются Spring MVC DispatcherServlet
, Он ничего не знает о вашем DisplayServlet
именно поэтому, как показано в журнале, DispatcherServlet
пытался обработать запрос, а не ваш DisplayServlet
,
Есть несколько способов, которыми вы могли бы продолжить. Например:
- Вы можете изменить свое приложение, чтобы обернуть ваши сервлеты, используя
ServletWrappingController
так что Spring MVC о них знает. - Вы можете изменить свой подход к тестированию и использовать
RestTemplate
против реального сервера. Вы на самом деле уже запускаете реальный сервер в силуWebIntegrationTest
аннотация на вашем тестовом классе.