0

我正在尝试为我的 Spring Boot 应用程序添加单元测试。它不起作用,并抛出 404。我使用的是 1.2.1 版本的 spring boot,并且依赖于 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)
4

1 回答 1

1

Spring MVC Test 仅设计用于测试由 Spring MVC 处理的请求DispatcherServlet。它对您一无所知DisplayServlet,这就是为什么,如日志中所示,DispatcherServlet尝试处理请求而不是您的DisplayServlet.

您可以通过几种不同的方式进行操作。例如:

  1. 您可以更改您的应用程序来包装您的 servlet,ServletWrappingController以便 Spring MVC 知道它们。
  2. 您可以更改测试方法并RestTemplate针对真实服务器使用。您实际上已经通过WebIntegrationTest测试类上的注释启动了一个真正的服务器。
于 2015-08-27T19:08:32.080 回答