当前位置: 首页 > 知识库问答 >
问题:

为什么MockMvc不能在spring启动中测试@webservlet

班凌
2023-03-14
@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个答案

漆雕修德
2023-03-14

mockmvc用于测试控制器(即您定义的@controller的组件,该组件具有带有@requestmapping的方法)。MockMvc允许您在不启动servlet容器的情况下测试您的web层,并为您模拟servlet上下文。

您将在此环境之外创建一个原始servlet。所以,不,这是不支持的。

 类似资料:
  • 我需要jUnit测试的帮助,我的结果是json文件,我需要测试该文件的长度,问题是在jsonPath函数中没有这样的方法。 这里是我的测试方法,预期长度是7。如有任何帮助,我将不胜感激,谢谢

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行的JAR文件。 我有一个控制器: 和另一个测试类。使用Spring的MockMVC框架进行测试。这在测试中驱动MVC应用程序,就好像它在容器中运行一样, 但我犯了一个错误:

  • 对于Vaadin10和Vaadin12我得到了相同的结果。spring版本是2.1.2 我期待以下结果 我调用localhost:xxx/=>浏览器询问用户名/密码 我调用localhost:xxx/logout=>浏览器不问密码!

  • 我试图在RESTAPI中对登录和安全性进行单元测试,所以我尝试尽可能地模拟现实生活中的请求序列。 我的第一个要求是: (请参见pastebin上的完整类)。 我尝试在这里获取cookie,以便以后能够使用收到的CSRF令牌登录,但是数组是空的! 然而,如果我运行我的应用程序并调用 我确实得到了一个Set Cookie头,可以稍后使用该Cookie(和CSRF令牌)进行身份验证。 所以问题是:如何让

  • 这是:“Parent root=fxmlloader.load(getClass().getResource(”sample.fxml“));” 我不明白剩下的部分,所以我希望你能轻松地解决这个问题:)