从事java研发两年半,两年时间在接触OSGI框架,物联网相关协议,对java底层略显熟悉,基本没接触过平台开发,近几个月开始做平台研发,独立部署模块,因为要做单元测试,于是就有了单测的一些基本坑
基本背景:需要做单测的接口中,有调用http服务器的地方,但是在开发环境,是连接不上的,因此,需要考虑mock来模拟数据
直接复制我代码里的一些实现:
/**
* PhoneQueryController Tester.
* @author <QSyiren>
* @version 1.0
* @since <pre>12/04/2019</pre>
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({ HttpsUtils.class , RedisService.class,Redisson.class})
@WebAppConfiguration
public class PhoneQueryControllerTest {
@InjectMocks
PhoneQueryController phoneQueryController;
private MockMvc mockMvc;
@Before
public void setUp() {
PowerMockito.mockStatic(HttpsUtils.class);
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(phoneQueryController).build();
}
@Test(expected = RestException.class)
public void testGetNumberDetailsNullService(){
MsgInfo msgInfo = new MsgInfo();
msgInfo.setServiceId("0025");
phoneQueryController.getNumberDetails(msgInfo);
}
/**
* Method: getNumberDetails(@RequestBody MsgInfo msgInfo)
*/
@Test
public void testGetNumberDetails1() throws Exception {
PowerMockito.mock(RedisService.class);
MsgInfo msgInfo = new MsgInfo();
msgInfo.setSinglePhoneNumber("12478945612");
msgInfo.setServiceId("0025");
String json = "{\"singlePhoneNumber\":\"15395820427\",\"serviceId\":\"0021\"}";
Object data = "{\n" +
"\t\t\"respCode\": \"03\",\n" +
"\t\t\"respDesc\": \"HTTP header token expired or invalid\"\n" +
"\t}";
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("httpStts", 200);
resultMap.put("responseData",data);
Mockito.when(HttpsUtils.post(Mockito.anyMap(),Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(resultMap);
RedisService redisService = PowerMockito.mock(RedisService.class);
MemberModifier.field(PhoneQueryController.class, "redisService").set(phoneQueryController, redisService);
Mockito.when(redisService.getHashKeyValue(Mockito.anyString())).thenReturn("123");
ResponseMessage responseMessage = phoneQueryController.getNumberDetails(msgInfo);
System.out.println(responseMessage.getCode());
mockMvc.perform(post("/uniquerysrv/querybynp").contentType(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("1000000"))
.andDo(print());
}
}
由于时间问题,就列出上面的一种使用方法,下面挂载一些觉得写的还不错的博客连接: