知识大全 利用spring2.5和Reflection简化测试中的mock[1]
Posted 知
篇首语:好汉不吃闷头亏,好鸟不钻刺笆林。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用spring2.5和Reflection简化测试中的mock[1]相关的知识,希望对你有一定的参考价值。
利用spring2.5和Reflection简化测试中的mock[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
spring 最大的特色就是全面使用annotation代替xml配置 包括IOC Container springMVC和 TestContext测试框架等 给我们开发带来了极大的便利 springMVC的新特性在这篇文章里面已经有了比较详尽的介绍 而对于spring的新TestContext测试框架 大家也可以从这里得到详细的例子说明 有兴趣的可以去仔细阅读 本文不再赘述 总而言之 通过spring 提供的 annotation 我们可以让我们的类——包括controller Test等职责特殊的类——更 POJO 化 更易于测试 也提高了 TestCase的开发效率
在开发过程中 我们通常需要mock特定的对象来测试预期行为 或者使用stub对象来提高单元测试效率 最常见的例子就是在多层webapp中 在controller类的测试方法里mock或 stub底层dao类的方法 从而减轻单元测试时数据库操作的开销 加快单元测试速率 至于Reflection 已不是java的新概念了 各样框架基本上都有使用Reflection来增强Runtime的动态性 而java 里Reflection效率的提升和annotation的引入 更是极大地提高java语言的动态性 让开发人员得到更多Runtime的灵活性 本文将演示如何使用spring 和Reflection简化测试中的 mock 使用的JUnit框架是JUnit mock框架是Easymock
让我们先看看最原始的使用mock对象的测试(假设基于jdk 进行开发 使用了包括static import varargs等新特性)
import static easymock EasyMock *;
public void HelloworldTest extends AbstractSingleSpringContextTests private Foo foo = createMock(Foo class); private Bar bar = createMock(Bar class); private Helloworld helloworld; @Before public void before() reset(foo bar); helloworld = new Helloworld(foo bar); @After public void after() verify(foo bar); @Test public void shouldSayHello() //set expectations about foo/bar replay(foo bar); helloworld sayHello(); //assert verification //
可以看到 因为使用了 Spring 老版本的 TestContext 上面的代码至少有两个方面是需要加强的
需要大量的 mock 对象创建操作 与真正的 Test Case 无关的繁琐代码 而且还引入了对Spring Context Test 类的继承依赖 针对不同的 Test 类 因为用到不同的 mock 对象 每次都需要显式去指明 reset/replay/verify 用到的 mock 对象
针对上面的两个问题 我们有相应的解决方案来改进
使用spring来替我们创建mock对象 由spring IOC Container在runtime注入需要的mock对象 提供更通用的rest/replay/verify机制来验证mock对象 而不是每个 Test 类都需要单独处理
cha138/Article/program/Java/ky/201311/29006相关参考
知识大全 Java中利用Reflection API优化代码
Java中利用ReflectionAPI优化代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Spring2.5整合RMI技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java的RMI
知识大全 Spring2.5整合ActiveMQ 5.2(P2P文本消息)
Spring2.5整合ActiveMQ5.2(P2P文本消息) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
Spring2.5注释驱动与基于注释的MVC 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Sp
知识大全 Spring2.5访问Session属性的四种策略
Spring2.5访问Session属性的四种策略 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 通过Spring2.5对单元测试的Annotation支持进行TDD开发
通过Spring2.5对单元测试的Annotation支持进行TDD开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们
利用Java存储过程简化数据库操作 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 利用Java存
知识大全 Java Reflection (JAVA反射)详解
JavaReflection(JAVA反射)详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#利用反射简化给类字段赋值 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个例子主要的思路是