mock单元测试mockmvc详解
mock(模拟)
依赖于spring的框架和spring的环境
切⽚测试:指⽤mockmvc测试controller层,模拟返回service层的值,将层与层间的联系断开。
集成测试:指⽤mockmvc测试controller层,但不间隔service层。将controller层和service层集合起来测试。
java的单元测试框架有junit、mockMvc等
java的mock框架⼀般有Mockito、EasyMock、powerMock等(框架⽤来提供mock的⼯具,⽤于mock的打桩和断⾔)
springMVC的测试中,⼀般采⽤mockMvc+Mockito的组合来进⾏mock模拟测试
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = Application.class)
@ContextConfiguration(loader = SpringBootContextLoaderEx.class)
public class ControllerTestJuint extends BaseJunit{
private MockMvc mockMvc;
@Autowired
protected WebApplicationContext wac;
    // mock的对象,stationService被mockbean注解之后,会⾃⼰注⼊到容器当中,stationService中的所有⽅法除开被打桩返回的,其余调⽤时,都返回null     @MockBean
    private StationService stationService;     
@Before()  //这个⽅法在每个⽅法执⾏之前都会执⾏⼀遍
public void setup() {
mvc的controller
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();  //初始化MockMvc对象
      SecurityUtils.Bean(SecurityManager.class);
}
  @Test
  public void mockTest() throws Exception{
     // 打桩,给指定⽅法返回值
     when(stationService.add(any(),any())).thenReturn(true);
     // 给返回值为void的⽅法打桩
     doNothing.when(stationService).updateService(any());
ResultActions reaction = kMvc.perform(MockMvcRequestBuilders.post("/sys/out/mockTest")
.contentType(MediaType.APPLICATION_JSON)//请求体时json
.param("customerId","7")
.param("serviceType","all_service")
.
param("params[company_id]","1110000")//组装map对象
.param("params[AGE]","0,5"))
        .anddo(MockMvcResultHandlers.print())  // 控制台打印出请求体
);
reaction.andExpect(MockMvcResultMatchers.status().isOk());
MvcResult mvcResult =reaction.andReturn();
System.out.Response().getContentAsString());
TimeUnit.SECONDS.sleep(60*60);
}
}
thenReturn 中可以指定多个返回值。在调⽤时返回值依次出现。若调⽤次数超过返回值的数量,再次调
⽤时返回最后⼀个返回值mockito不⽀持对静态(static)⽅法进⾏打桩。可以使⽤PowerMock对静态⽅法进⾏打桩
PowerMockito.when(AmountUtil.CustomFormatWith2Digits(anyInt())).thenReturn("zzzz");
对mvc的controller层进⾏测试,使⽤Mockmvc
对普通⽅法进⾏单元测试,使⽤junit
普通⽅法也能进⾏mock,使⽤junit+mockitor
普通⽅法测试:
@Test
public void testBubbleSort() {
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node[] nodes = {node1,node2,node3};
bubbleSort.bubbleSort(nodes);
Assert.assertEquals(3, nodes[0].getValue()); // 断⾔,验证测试的正确性    Assert.assertEquals(2, nodes[1].getValue());
Assert.assertEquals(1, nodes[2].getValue());
}
mockitor 可以使⽤verify来验证⽅法的调⽤次数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。