如何在Java中编写OrderController的集成测试?求可参考的实现示例
OrderController集成测试编写示例
你现有测试类缺少Web上下文注入和MockMvc初始化逻辑,完整的测试实现如下:
import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration // 此处替换为你项目实际的Spring配置类/配置文件路径,Spring Boot项目可直接替换为@SpringBootTest注解 @ContextConfiguration(classes = {SpringConfig.class, OrderController.class, OrderServiceImpl.class}) public class OrderControllerTest { @Autowired private WebApplicationContext webApplicationContext; // 若不需要依赖真实数据库,可打开下方注释用Mock对象模拟Service层返回 // @MockBean // private OrderService orderService; private MockMvc mockMvc; @Before public void setup() { // 初始化MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); // 若使用Mock的Service,可改为下方初始化方式 // mockMvc = MockMvcBuilders.standaloneSetup(new OrderController(orderService)).build(); } // 测试新增订单接口 @Test public void shouldAddNewOrder() throws Exception { // 按你项目AddUpdateOrderEnter实体的实际字段调整参数名、参数值 mockMvc.perform(post("/add") .param("orderNo", "TEST20240501001") .param("totalAmount", "199.99") .param("creatorId", "10001")) // 验证HTTP状态码为200 .andExpect(status().isOk()) // 按你项目Response类的实际成功状态码调整value值 .andExpect(jsonPath("$.code").value(200)) // 验证返回结果符合预期 .andExpect(jsonPath("$.data.orderNo").value("TEST20240501001")); } // 测试新增订单配件接口 @Test public void shouldAddOrderParts() throws Exception { mockMvc.perform(post("/addOrderParts") .param("orderId", "10001") .param("partCode", "P0023") .param("count", "3")) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data.success").value(true)); } // 测试订单列表查询接口 @Test public void shouldGetOrderList() throws Exception { mockMvc.perform(get("/list") .param("pageNum", "1") .param("pageSize", "10") .param("creatorId", "10001")) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data").isArray()) .andExpect(jsonPath("$.data.length()").gte(0)); } // 测试订单详情查询接口 @Test public void shouldGetOrderDetails() throws Exception { mockMvc.perform(get("/details") .param("id", "10001")) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data.id").value("10001")); } // 测试订单删除接口 @Test public void shouldDeleteOrder() throws Exception { mockMvc.perform(post("/delete") .param("id", "10001")) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)) .andExpect(jsonPath("$.data.success").value(true)); } }
- 所有参数名、返回字段、成功状态码都需要按照你项目的实际定义调整
- 若使用Mock的Service层,可配合Mockito的
when(orderService.addOrder(any())).thenReturn(自定义返回结果)模拟业务层返回,无需依赖测试数据库
内容的提问来源于stack exchange,提问作者ced_d0llars
相关产品推荐
相关产品推荐

