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 } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70084.html