Jmockit对接口与基类的mock

Jmockit对接口与基类的mock

对一个类或接口使用@Capturing,那么该类的所有子类或接口所有实现都将处于mocked状态,即使是临时定义的实现或子类也会是mocked状态

接口示例:

//接口
public interface JInterface
{
    public String methodA(String para);
}
//实现
public class ImplA implements JInterface
{
    public String methodA(String para)
    {
        return "oringinal methodA " + para;
    }
}

Mock测试

@Test
public void test1(@Capturing final JInterface jInterface)//JInterface接口被mocked
{
    JInterface i = new ImplA();
    System.out.println(i.methodA("d"));//null 因为被mocked

    new NonStrictExpectations()
    {
        {
            jInterface.methodA(anyString);
            returns("first mocked impl method", "second mocked impl method");//
        }
    };

    System.out.println(i.methodA("ohad")); //record的第一个结果first mocked impl method

    //新定义的实现也将处于mocked状态
    JInterface i3 = new JInterface()
    {

        public String methodA(String para)
        {
            // TODO Auto-generated method stub
            return null;
        }
    };

    System.out.println(i3.methodA("dpfiojaoifh")); //record的第二个结果second mocked impl method
}

继承示例:

//父类
public abstract class Base
{
    abstract public String methodA();
}
//子类
public class ExtendA extends Base
{
    @Override
    public String methodA()
    {
        return "original method";
    }

Mock测试

@Test
public void test4(@Capturing final Base base)
{
    Base obj = new ExtendA();
    System.out.println(obj.methodA());//null

    new NonStrictExpectations()
    {
        {
            base.methodA();
            //这里相当于returns(Object firstValue, Object... remainingValues)
            result = "mocked method1";
            result = "mocked method2";
        }
    };

    System.out.println(obj.methodA());//mocked method1

    Base obj1 = new Base()
    {

        @Override
        public String methodA()
        {
            return null;
        }
    };

    System.out.println(obj1.methodA());//mocked method2
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值