Не загружается пружинный джунит

Я пытаюсь добавить модульное тестирование для моей весенней загрузки приложения. Это не работает, и выдает 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,

Есть несколько способов, которыми вы могли бы продолжить. Например:

  1. Вы можете изменить свое приложение, чтобы обернуть ваши сервлеты, используя ServletWrappingController так что Spring MVC о них знает.
  2. Вы можете изменить свой подход к тестированию и использовать RestTemplate против реального сервера. Вы на самом деле уже запускаете реальный сервер в силу WebIntegrationTest аннотация на вашем тестовом классе.
Другие вопросы по тегам