相较于测试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化的工具,非框架提供。