单元测试JMockit使用
声明:本文转载自https://my.oschina.net/qixiaobo025/blog/1540545,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。
背景
- 由于目前dubbo等外部依赖越来越多 现在小伙伴关于测试经常跑不通 比如
- 之前也提供了stub方案,但是目前使用的人几乎没有junit测试之第三方组件mock
文章中提到让大家学习使用jMockit 似乎也没有人响应
使用
-
场景需要返回特殊的值(特定异常特定值 非法值等等就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); }
-
注意此处为接口 调用了getMockInstance 非常神奇的返回了指定的值 并且模拟出了一种size为0但是get一直可以返回特定结果的情况
-
使用spring注解部分依赖特定的外部服务(此处需要依赖网络)
@Test public void testJmockitHttpClient(){ new MockUp<CarZoneHttpClient>() { @Mock public String getJsonString(String requestJsonStr, String requestUrl){ return"我是mocked!"; }; }; Assert.assertEquals( CarZoneHttpClient.getJsonString("",""),"我是mocked!"); }
-
很明显这样就可以直接返回了需要的值
-
部分依赖dubbo接口
new MockUp<CustomerCarServiceImpl>(){ @Mock CustomerCarVO synchronizedCustomerCar(CustomerCarVO customerCarVO, int type, boolean notNull) throws UnsupportedEncodingException { return customerCarVO; } };
-
此处业务逻辑可以强行跳过 这样可以不必要依赖指定接口(dubbo,rmi)也可以制造空指针等测试代码异常
严格来说基本上MockUp可以完成绝大部分我能想到的测试场景了~
-
猜猜这是咋实现的~ 下一篇分解
抱拳了,老铁!
本文发表于2017年09月21日 00:37
(c)注:本文转载自https://my.oschina.net/qixiaobo025/blog/1540545,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.
阅读 2302 讨论 0 喜欢 0