MockMvc


import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import javax.annotation.Resource;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@Slf4j
@RunWith(SpringRunner.class)
@WebMvcTest(OcrController.class)
@AutoConfigureMockMvc
public class OcrControllerTest {

    private MockMvc mockMvc;

    private final static String  queryUrl = "/query";


    @Resource
    private OcrControllerTest controllerTest;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(controllerTest).build();
    }

    private String mockRequest(String url,String requestStr) throws Exception {
        return mockMvc.perform(MockMvcRequestBuilders.post(url)
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                        .content(requestStr))
                .andExpect(status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn().getResponse().getContentAsString();
    }

    @Test
    public void queryCelUser() throws Exception {
        log.info(mockRequest(queryUrl, JSON.toJSONString(request)));

    }

}


### MockMvc 使用指南与示例 #### 初始化 MockMvc 实例 为了在单元测试中使用 `MockMvc` 进行控制器层的测试而不启动完整的 Servlet 容器,通常会在测试类中标记为 `@WebMvcTest` 或者手动配置 `MockMvc` 实例。对于特定的服务依赖,比如 `GreetingService`,可以通过 `@MockBean` 注解为其创建并注入一个模拟对象[^2]。 ```java import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.web.servlet.MockMvc; @WebMvcTest(controllers = HelloController.class) public class HelloControllerTests { @Autowired private MockMvc mockMvc; @MockBean private GreetingService greetingService; @Test void shouldReturnDefaultMessage() throws Exception { when(greetingService.greet()).thenReturn("Hello, Spring Boot!"); this.mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string("Hello, Spring Boot!")); } } ``` 这段代码展示了如何通过 `Mockito` 来设置服务方法返回预期的结果,并验证 HTTP GET 请求 `/hello` 的响应状态码以及内容是否符合预期。 #### 执行简单的GET请求测试 上述例子中的 `mockMvc.perform()` 方法用于发起一次虚拟的HTTP请求到指定路径;`.andExpect()` 则用来断言该次调用后的结果应该满足哪些条件。此案例中检查了两个方面:一是服务器端应答的状态码应当是成功的 (即 200 OK),二是实际接收到的内容字符串要匹配预设的消息 "Hello, Spring Boot!"[^4]。 #### 配置全局异常处理程序的支持 如果希望在测试期间也能捕获和处理全局级别的异常情况,可以在编写测试之前先定义好相应的异常处理器,在测试环境中同样生效。这有助于确保即使是在隔离环境下运行的应用逻辑也能够按照生产环境的行为模式工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值