`
fengjia10
  • 浏览: 29902 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

      EAI设计开发中,由于涉及多个系统之间的交互,有时需要借用Mock思想,正所谓隔离性编码。在你深入理解了Junit和TestNG框架背后的设计哲学,并且深谙动态代理理念后,这里再为大家送上Mock大餐,没错,Jmockit,公司目前在用的Mock框架,其实和我们熟知的Mokito,Jmock和easyMock差不多,只不过对于静态,final的Mock更彻底,更优雅而已,同时它还有自己的增量Testing plugin.

       当然,如果你是TDD拥捧者,在发挥测试框架强大功能的同时,你一定会对持续集成有更深的认识。即便你的日常编码中缺少单元自测环节(不好的习惯奥),但我还是建议你,花点时间学习一下,掌握一下,只需启动它一次,你便会深深地爱上它(技术敏感性,这是我的感悟)。也许你是一名开发老手,甚至是一位技术大牛,在开发过程中,尤其是在编写底层框架代码时,肯定也曾为层与层之间的隔离测试而烦恼,是否还觉得自己写的工具类,静态方法,私有方法,final类,难于测试?这时,Jmockit映入你的眼帘,没错,试着用用它,没准你和我一样,对测试有术也许有更深的理解。试着拥抱开源,并回报开源吧!

       附件是为大家分享的Jmockit ppt,最后补充一点,Jmockit的掌握是需要一定编程技巧和编程经验的,大家慢慢享用吧,有问题可以留言,一同探讨技术难题。

2
0
分享到:
评论
4 楼 fengjia10 2011-08-04  
gkbusy 写道
个人的愚见:
PPT名为《JMockit深度使用》更为合适。

乍看标题还以为是讲解原理的~~
相信作者已经看过不少源码,可以深入挖掘一下JMockit录制和回放过程如何通过字节码热替换来实现mock、以及这么做的一些弊端(比如,多个测试类按不同的顺序执行,会影响到某个被测试的业务类的静态属性的正确初始化)。



恩,建议不错,这个肯定会的呢,只是最近工作上的事情比较多,后面会持续更新的,尤其是multiThread跑测试用例时,行为,状态mock混乱的场景以及应对方案
3 楼 gkbusy 2011-07-20  
个人的愚见:
PPT名为《JMockit深度使用》更为合适。

乍看标题还以为是讲解原理的~~
相信作者已经看过不少源码,可以深入挖掘一下JMockit录制和回放过程如何通过字节码热替换来实现mock、以及这么做的一些弊端(比如,多个测试类按不同的顺序执行,会影响到某个被测试的业务类的静态属性的正确初始化)。
2 楼 fengjia10 2011-04-12  
    不好意思,才看到你的留言,趁着中午休息,简单回复一下你的问题吧,希望对你有用! 
    if you want to discards any mocks set up for the specified classes that are currently in effect,please use tearDownMocks(Class<?>... realClasses),such as
你可以写成Mockit.tearDownMocks(LockService.class),这是在你这种写法的基础上的最小改动;
    其实还是有其它解决方案的,比方说,你可以自己设置标志位,不同实例返回不一样的结果,这样也可以防止mock互相干扰;异或考虑@MockClass的instantiation属性,采用PerMockedInstance或者PerMockSetup 试试!
1 楼 Mc_Qsad 2011-03-11  
请问 我用jmockit的时候,模拟同一个静态方法,模拟返回不同值,但是他们互相影响
public void testLogonAndAddOnlineUserTest1() {
new MockUp<LockService>() {
@SuppressWarnings("unused")
@Mock
public int getLimitUserCount() {
return -1;
}
}.getMockInstance();
try {
securityService.logonAndAddOnlineUser("123123", "123123213",
"10.10.181.105", null);
Assert.assertFalse(mark);
} catch (SecurityException e) {
assertThat(e.getMessage(), is("无效访问,请使用正版软件!"));
mark = true;
}
Assert.assertTrue(mark);
Mockit.tearDownMocks();
}
我没一个方法都有Mockit.tearDownMocks();,但是仍然不能让其类似于数据库回滚掉,麻烦你帮忙解惑

相关推荐

Global site tag (gtag.js) - Google Analytics