单元测试JMockit使用


title: 单元测试JMockit使用 tags:

  • JMockit
  • Junit
  • 测试
  • Mockup
  • Instrumentation categories: 测试 date: 2017-09-21 13:10:15

背景

  1. 由于目前dubbo等外部依赖越来越多 现在小伙伴关于测试经常跑不通 比如
  2. 之前也提供了stub方案,但是目前使用的人几乎没有junit测试之第三方组件mock 
    文章中提到让大家学习使用jMockit 似乎也没有人响应

使用

  1. 场景需要返回特殊的值(特定异常特定值 非法值等等就OK)

    @Test
    public void testJmockit(){
        List mockInstance = new MockUp<List>() {
            @Mock
            public String get
                    (int index) {
                return "aaaa";
            }
        }.getMockInstance();
        Assert.assertEquals(  mockInstance.get(1),"aaaa");
        Assert.assertEquals(  mockInstance.get(Integer.MAX_VALUE),"aaaa");
        Assert.assertEquals(  mockInstance.size(),0);
    }
    复制代码

  2. 注意此处为接口 调用了getMockInstance 非常神奇的返回了指定的值 并且模拟出了一种size为0但是get一直可以返回特定结果的情况

  3. 使用spring注解部分依赖特定的外部服务(此处需要依赖网络)

    @Test
        public void testJmockitHttpClient(){
            new MockUp<CarZoneHttpClient>() {
                @Mock
                public  String getJsonString(String requestJsonStr, String requestUrl){
    return"我是mocked!";
                };
            };
            Assert.assertEquals(  CarZoneHttpClient.getJsonString("",""),"我是mocked!");
        }
    复制代码

  4. 很明显这样就可以直接返回了需要的值

  5. 部分依赖dubbo接口

    new MockUp<CustomerCarServiceImpl>(){
        @Mock
        CustomerCarVO synchronizedCustomerCar(CustomerCarVO customerCarVO, int type, boolean notNull) throws UnsupportedEncodingException {
          return customerCarVO;
        }
     
    };
    复制代码

  6. 此处业务逻辑可以强行跳过 这样可以不必要依赖指定接口(dubbo,rmi)也可以制造空指针等测试代码异常
    严格来说基本上MockUp可以完成绝大部分我能想到的测试场景了~

  7. 猜猜这是咋实现的~ 下一篇分解

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值