利用Ruby简化你的Java测试(进阶篇) - 编程入门网
Mock测试方面的领域化语言!它支持的语义非常的丰富,包括:
等等。DSL的应用是Ruby的一大特点,它甚至能让我们写出连客户都能很容易看懂的测试代码。这在敏捷实践中,与用户讨论接收测试时就显得非常有用及必要!我们也同样对比一下JUnit和EasyMock的实现:p
EasyMock属于非常正常的API调用,没有太多DSL的概念,在这方面JMock相对来说要好一些,不过和Ruby相比,表达相同的语义,还是更繁琐一些。我们继续完成最后一段测试代码,删除及投票:
看到这里,细心的同学一定会发现有些奇怪,并没有先增加一个Tilte是Document呀?是的,这个是Ruby的单元测试和Java机制不一样的地方,JUnit中,每个方法是在线程中执行的,不保证被执行的先后顺序,而Ruby的单元测试是简单反射,按字母排序后执行的,所以只有一个上下文环境。我特意在每个方法的描述前加了个数字序列,以保证按这个数字的大小顺序执行! 好了,到这里,对利用Ruby进行Mock测试介绍基本完成!剩余的EasyMock的示例测试留给大家自己完成吧! 总结 引入Ruby进行Mock测试可以有效简化单元测试时对各种环境的依赖,但是Mock也有Mock自己的问题,例如,它需要你对被测试类的内部细节有一定的了解,毕竟利用Mock技术进行测试属于白盒测试。当被测试类的内部实现有所改变而外部接口未发生变化时,原本不该出错的测试方法依旧有被打破的风险。还是回到开篇的那句话:通常,新技术的引入只能降低解决问题的难度,而不是消除问题本身! 作者介绍:殷安平,现任阿里软件研究院平台二部架构师,工作6年以来一直从事Java开发,爱好广泛,长期关注敏捷开发。对动态语言有了强烈的兴趣,致力于将动态语言带入实际工作中!工作之余喜欢摄影和读书。个人RSS聚合: http://friendfeed.com/yapex。联系方式:anping.yin AT alibaba-inc.com。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |