Springboot TestController

本文通过实例演示如何使用SpringRunner和MockMvc进行SpringBoot项目的单元测试。代码展示了如何设置MockMvc,执行GET请求并验证响应状态及内容类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot TestController

挺简单的,话不多说,直接上代码。

@RunWith(SpringRunner.class)
@SpringBootTest
public class FinOrderControllerTest {
    private MockMvc mvc;
    private ObjectMapper mapper = new ObjectMapper();

    @Autowired
    private WebApplicationContext context;

    @Before
    public void setup() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                //.apply(springSecurity())
                .build();
    }

    @Test
    public void selectAll() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/order/all")
                .param("id", String.valueOf(1))//传入参数在这些
                .contentType(MediaType.APPLICATION_JSON_UTF8)
               // .content(mapper.writeValueAsString(id))//将对象转化成JSON字符换
                  )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andDo(MockMvcResultHandlers.print())////打印出请求和相应的内容
                .andExpect(status().is2xxSuccessful());
    }
}
### 如何在 Spring Boot 中对 Controller 进行单元测试 #### 使用 `@WebMvcTest` 注解进行控制器测试 为了专注于测试Spring Boot应用程序中的Controller层,可以使用`@WebMvcTest`注解。此注解会指示Spring Test框架只加载必要的组件来运行MVC栈,而不需要启动整个应用上下文[^3]。 ```java import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @WebMvcTest(controllers = ExampleController.class) public class ExampleControllerTests { @Autowired private MockMvc mockMvc; @MockBean private ExampleService exampleService; @Test public void shouldReturnDefaultMessage() throws Exception { this.mockMvc.perform(get("/api/example")) .andExpect(status().isOk()) .andExpect(content().string("Hello, World")); } } ``` 这段代码展示了如何设置一个简单的JUnit测试类来检验名为`ExampleController`的RESTful Web服务端点的行为。通过`mockMvc.perform()`方法发送GET请求到指定路径,并利用链式的`.andExpect()`调用来定义期望的结果状态码以及返回的内容字符串匹配[^2]。 #### 利用 `Mockito` 模拟依赖对象 当测试controller时,通常希望隔离被测部分与其他业务逻辑或外部资源之间的交互。这可以通过引入像`@MockBean`这样的注解来创建模拟的服务实例完成,在上面的例子中就是`exampleService`。这样可以在不实际执行这些服务的情况下验证controller的工作方式。 #### 验证 HTTP 响应细节 除了检查HTTP的状态码外,还可以进一步深入地去校验响应体的具体结构和数据准确性。比如: - JSON格式的数据解析; - 特定字段的存在性和值; - 头部信息等其他元数据。 对于JSON类型的API接口来说,推荐采用JsonPath表达式来进行更精确细致的断言操作。 ```java @Test public void testGetUserDetailsReturnsCorrectData() throws Exception{ User userDetails = new User(); userDetails.setName("John Doe"); when(userDetailsService.getUserById(anyLong())).thenReturn(userDetails); this.mockMvc.perform(get("/users/1")) .andExpect(jsonPath("$.name").value("John Doe")); } ``` 上述例子说明了怎样借助`jsonPath()`函数针对特定属性做对比分析,从而确保API按预期工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值