利用Spring2.5和Reflection简化测试中的mock

spring2.5最大的特色就是全面使用annotation代替xml配置,包括IOC Container、springMVC和 TestContext测试框架等,给我们开发带来了极大的便利。springMVC的新特性在这篇文章里面已经有了比较详尽的介绍,而对于spring的新TestContext测试框架,大家也可以从这里得到详细的例子说明,有兴趣的可以去仔细阅读,本文不再赘述。总而言之,通过spring2.5提供的 annotation,我们可以让我们的类——包括controller,Test等职责特殊的类——更 POJO 化,更易于测试,也提高了 TestCase的开发效率。

在开发过程中,我们通常需要mock特定的对象来测试预期行为,或者使用stub对象来提高单元测试效率。最常见的例子就是在多层webapp中,在controller类的测试方法里mock或 stub底层dao类的方法,从而减轻单元测试时数据库操作的开销,加快单元测试速率。至于Reflection,已不是java的新概念了,各样框架基本上都有使用Reflection来增强Runtime的动态性。而java5里Reflection效率的提升和annotation的引入,更是极大地提高java语言的动态性,让开发人员得到更多Runtime的灵活性。本文将演示如何使用spring2.5和Reflection简化测试中的 mock,使用的JUnit框架是JUnit4.4,mock框架是Easymock2.4。

让我们先看看最原始的使用mock对象的测试(假设基于jdk5进行开发,使用了包括static import,varargs等新特性):

import static org.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,上面的代码至少有两个方面是需要加强的:

1. 需要大量的 mock 对象创建操作,与真正的 Test Case 无关的繁琐代码,而且还引入了对Spring Context Test 类的继承依赖

2. 针对不同的 Test 类,因为用到不同的 mock 对象,每次都需要显式去指明 reset/replay/verify 用到的 mock 对象

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索框架
, springmvc
, 对象
, 测试
, reflection
, springmvc+mysql
, 单元测试
, springmvc 高并发
, spring junit测试
, mock
, java springmvc
, easymock
, java spring junit
spring单元测试junit测试
spring mock、spring mockito、spring boot mockmvc、spring mockmvc、spring mock 测试,以便于您获取更多的相关知识。

时间: 2024-11-01 17:23:09

利用Spring2.5和Reflection简化测试中的mock的相关文章

利用Selenium IDE在翻译验证测试中快速实现可复用的自动化测试

概述 翻译验证测试是指在产品集成翻译文件之后,由专业的翻译人员检查翻译在产品的上下文语境中是否准确, 是否能方便最终用户的理解和使用.考虑到翻译人员产品操作的熟练程度和成本等原因,通常是由产品部门提供语言的截图 给翻译人员进行检查.软件产品的翻译验证测试对提高语言用户的满意度和更好的将产品推向国际市场具有十分重要的意义 .然而由于以下原因,翻译验证测试的截图工作通常不太容易进行自动化操作: 为了尽快的发布产品,翻译进入产品到产品最终发布的时间间隔通常被安排的很短,限制了翻译验证测试的自动化脚本

Node.js测试中的Mock文件系统详解_node.js

Mock文件系统相关的工具包括:     Mock fs 模块的工具mock-fs .     Mock require 模块的工具mock-require . 安装 mock-fs和 mock-require 都是NPM软件包,在项目中可通过npm直接安装: npm install mock-fs mock-require --save Mock fs 模块 通过mock()方法可以创建多个文件的Mock并立即生效, 此后对fs的调用都会访问这些Mock文件. 调用mock.restore()

利用spring进行简化测试(JUNIT)

下午复习了一点关于spring简化测试方面的内容,比较感兴趣,就记录下来啦,毕竟记下东西以后可以来看看的,记忆力不总是很好的,但写的东西可以当作复习资料来看看的. 利用spring的mock类进行单元测试:    spring框架提供了大量测试的mock类,包括与jndi,porlet,web应用相关的mock类.尤其是web应用相关的mock类,可以大大提高web组件测试的方便性. 打开spring的下载包的mock文件夹(路径...mock/org/springframework/mock/

渗透测试中的Application Verifier(DoubleAgent利用介绍)

本文讲的是渗透测试中的Application Verifier(DoubleAgent利用介绍), 0x00 前言 近日,Cybellum Technologies LTD公开了一个0-day漏洞的POC,对其命名为"DoubleAgent",可用于控制主流的杀毒软件. 不同于以往的绕过思路,这次使用的是一种直接攻击并劫持的方式,本文将要介绍该方式的原理,分享利用思路.攻击条件和防御方法 0x01 简介 该方式主要是对微软系统自带的Application Verifier(应用程序检验

利用Python中的mock库对Python代码进行模拟测试_python

 如何不靠耐心测试 通常,我们编写的软件会直接与那些我们称之为"肮脏的"服务交互.通俗地说,服务对我们的应用来说是至关重要的,它们之间的交互是我们设计好的,但这会带来我们不希望的副作用--就是那些在我们自己测试的时候不希望的功能. 比如,可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unittest库中有一个子包叫unittest.mock--或者你把它声明成一

运维前线:一线运维专家的运维方法、技巧与实践3.3 利用批处理与Shell脚本简化逻辑节点的搬迁

3.3 利用批处理与Shell脚本简化逻辑节点的搬迁 3.3.1 逻辑节点切换脚本的思路 众所周知,对于服务器的搬迁,不只会涉及物理层面的设备搬迁.在物理设备搬迁到新机房后,往往还需要对虚拟机中的多种参数进行相关调整. 如果管理的服务器台数比较少的话,则可以采用手工设置的方式逐一更改参数.但是,如果手中管理的Windows和Linux虚拟机有数千台的话,那么这些繁琐的参数调整一定会让你头疼不已.其中需要调整的参数如下: IP GATEWAY DNS WSUS NTP HOSTS 也许大家要问,像

Fortinet在NSS Labs的数据中心IPS测试中获得99.9%安全有效性得分

Fortinet(纳斯达克上市代码:FTNT),全球领先高性能网络安全解决方案供应商今日公布NSS Labs最新数据中心入侵防护系统(DCIPS)报告结果.NSS Lab的DCIPS报告是迄今为止业界最全面的测试,其安全价值图显示Fortinet的FortiGate 3000D在安全有效性(可阻止99.9%的漏洞利用)和受保护Mbps(兆比特每秒)平均TCO(总体拥有成本)方面获得最高评级. ·安全有效性:Fortinet在安全有效性方面获得近乎完美的99.9%得分.Fortinet不但在总体安

浅谈Symphony Spreadsheet在报表测试中的应用

报表测试中常见数据对比 在 ERP 和 BI 项目测试过程中,对报表数据进行校验是非常有必要的,常见的数据对比场 景如下:从系统导出的 Excel 格式的报表数据,然后再给一份业务数据的源数据,要求校验报表数据是否正确.报表的数据量 通常都非常庞大,这些数据通常都是通过聚合汇总以及其它逻辑运算得出的结果,源数据量也很大,源数据和报表数据的条数也 不一定相等,而且源数据通常会有很多张表,仅仅是通过肉眼观察源数据和报表数据是否一致,会导致测试工作量巨大,效率低 下,风险不易控制. 那么接下来就一起探

压力测试中存在的问题

压力测试中存在的问题 (What) 什么是压力测试 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分.软件压力测试的基本思路很简单: 不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试. 通常要进行软件压力测试的资源包括内部内存.CPU 可用性.磁盘空间和网络带宽. 压力测试涵盖,性能测试,负载测试,并发测试等等,这些测试点常常交织耦合在一起. 压力测试存在那些问题 我归纳一下又几点: 操作系统默认安装,在未做任何优化的情况下实施压力测试