相较于测试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传参的办法

@Testpublic void getChangeOilList() throws Exception {    MultiValueMap<String, String> 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模式传参的办法

@Testpublic 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化的工具,非框架提供。