相较于测试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<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模式传参的办法
@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化的工具,非框架提供。
发表回复