JMokit中的@Mocked与@Injectable区别

JMokit中的@Mocked与@Injectable区别

官方Tutorials:http://jmockit.org/gettingStarted.html#mockObject

首先,两个注解都可用于测试类成员mock field与参数用例参数mock parameter,对mock field的注解作用于整个测试类,而对mock parameter的注解只针对该测试用例

@Mocked与@Injectable的区别:前者针对类型,后者针对单个实例

有一个类ToBeMocked,具备一个public方法fun()

public Class ToBeMocked
{
    public String fun()
    {
         return "call original method";
    }   
}

以下分为四种情况讨论

  • @Mocked作用于测试类成员

整个测试类中被mock的类型的所有实例都将被mocked,被mocked的类所有非private方法都将处于mocked状态,被mocked的方法默认返回值null

public class MockedAndInjectableTest1
{
    @Mocked
    ToBeMocked instance;

    @Test
    public void test()
    {
        System.out.println(instance.fun()); //null

        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //null
    }
}
  • @Mocked作用于测试用例参数

该用例参数中被注解的类型将处于mock状态

public class MockedAndInjectableTest
{
    @Test
    public void test1(@Mocked final ToBeMocked instance)
    {
        System.out.println(instance.fun()); //null

        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //null
    }

    @Test
    public void test2()
    {
        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //call original method
    }
}
  • @Injectable作用于测试类成员

被注解的单个实例在整个测试类中将处于mocked状态

public class MockedAndInjectableTest
{
    @Injectable
    ToBeMocked instance;

    @Test
    public void test()
    {
        System.out.println(instance.fun()); //null

        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //call original method
    }
}
  • @Injectable作用于测试类参数

被注解的单个实例在该测试用例中将处于mocked状态

public class MockedAndInjectableTest
{
    @Test
    public void test1(@Injectable final ToBeMocked instanceA)
    {
        System.out.println(instanceA.fun()); //null

        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //call original method
    }

    @Test
    public void test2()
    {
        ToBeMocked newInstance = new ToBeMocked();
        System.out.println(newInstance.fun()); //call original method
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值