关于JUnit和Mockito的一些基本实践

从事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());
    }

}

 

由于时间问题,就列出上面的一种使用方法,下面挂载一些觉得写的还不错的博客连接:

Mockito的使用

powerMock

JUNIT和powerMock

JAcoco的配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值