(七)Mock方法中调用老方法--实战篇

本文介绍如何使用MockUp库实现对Java内置类Calendar的get方法进行条件性模拟。仅当时间为早上7点时采用模拟逻辑,其余情况保持原有逻辑不变,展示了高度定制化的单元测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过前面对MockUp介绍 ,使用,我们发现MockUp确实很强大。使用@Mock方法太直接了。
可是有时候 ,你只希望@Mock的方法当入参数满足特定条件下才走Mock逻辑,其它条件走老的逻辑。可以吗?
当然可以!看下面的例子:

import mockit.Invocation;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Assert;
import org.junit.Test;

import java.util.Calendar;
import java.util.Date;

//Mock方法中还可以调用老方法
public class InvocationMockUpTest {
    @Test
    public  void testMockUp(){
        //对Java自带类Calendar的get方法进行定制
        new MockUp<Calendar>(Calendar.class){
            //申明参数invocation,表示老方法的调用
            @Mock
            public int get(Invocation invocation, int unit){
                //只希望时间是早上7点
                if(unit == Calendar.HOUR_OF_DAY){
                    return  7;
                }
                return  invocation.proceed(unit);  //其他时间(年份,月份,日,分,秒均不变)
            }
        };
        Calendar now = Calendar.getInstance();   //创建一个Calendar对象
        Assert.assertTrue(now.get(Calendar.HOUR_OF_DAY )== 7);  // 只有小时变成Mock方法
        Assert.assertTrue(now.get(Calendar.MONTH) == (new Date()).getTime());   //其他的还是走老方法。
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值