在SpringBoot项目中编写controller测试用例

相较于测试service与dao层,测试controller部分稍微有些繁琐。

测试类的创建

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public class ControllerTest {
    @Autowired
 private MyController myController;
 private MockMvc mockMvc;
 Logger logger = LoggerFactory.getLogger(ControllerTest.class);
 @Before
 public void init(){
        mockMvc = MockMvcBuilders.standaloneSetup(oilChangeController).build();
 }
    
}

创建测试类的方式与service测试类基本一致,同样需要引入controller对象。不同之处在于需要使用@Before注解在每次测试用例执行前初始化MockMvc实例,@Before的作用是在每次测试用例执行之前会执行标注的方法。

测试传参方式为url传参的方法

@Test
public void getChangeOilList() throws Exception {
    MultiValueMap params = new LinkedMultiValueMap<>();
 params.add("pageSize", "10");
 params.add("pageNum", "1");
 params.add("tenantId", "1");
 MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/getinfo").params(params))
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
 logger.info(mvcResult.getResponse().getContentAsString());
}

这种方法多为get请求,需要实例化MultiValueMap的实例来存放参数,或者直接拼接在url中。

测试json形式传参的方法

@Test
public void changeTankOil() throws Exception {
    ChangeSetRequest request = new ChangeSetRequest();
 request.setOiltankNo("123");
 request.setTenantId("1");
 request.setOrgCode("4400010029");
 request.setShiftNo("111");
 request.setOilCode("093");
 request.setOperatorId("dfd");
 MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/change")
            .contentType(MediaType.APPLICATION_JSON)
            .content(JSONUtil.toJson(request)))
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
 logger.info(mvcResult.getResponse().getContentAsString());
}

这种方法通常属于get或者post请求,需要指定参数类型为json格式,示例中的JSONUtil为将对象json化的工具,非框架提供。

你可能感兴趣的:(java,springboot)