为什么MockMvc无法在spring-boot中测试@WebServlet

时间:2017-04-12 09:20:02

标签: spring-boot

@WebServlet(urlPatterns = "/test")
public class TestWebServlet  extends HttpServlet{

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setStatus(200);
        resp.getWriter().println("test");
    }
}

主要课程:

@SpringBootApplication
@ServletComponentScan
public class Demo20Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo20Application.class, args);
    }
}

测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class Demo20ApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testMockMvc() throws Exception {
        this.mockMvc.perform(post("/test"))
                .andExpect(status().isOk());
    }

}



java.lang.AssertionError: Status 
Expected :200
Actual   :404

servlet发送200状态代码,但测试结果显示状态为404

似乎MockMvc不能用于在spring boot中测试servlet

1 个答案:

答案 0 :(得分:1)

MockMvc用于测试控制器(即您定义@Controller的组件,其中包含@RequestMapping的某些方法。 MockMvc允许您在不启动servlet容器的情况下测试Web层,并为您模拟servlet上下文。

您正在完全在此环境之外创建原始servlet。所以,不,这是不受支持的。