easymock-2.4

合集下载

easy_mock

easy_mock

}}}这个 Servlet实现简单的用户验证的功能,若用户名和口令匹配“ admin”和“123456”,则请求被转发到指定的 dispatcher上,否则,直接抛出 RuntimeException。

为了测试 doPost()方法,我们需要模拟httpServletRequest,ServletContext和 RequestDispatcher对象,以便脱离 J2EE容器来测试这Servlet。

我们建立 TestCase,名为LoginServletTest:public class LoginServletTest extends TestCase {}我们首先测试当用户名和口令验证失败的情形,演示如何使用 EasyMock来模拟 HttpServletRequest对象:public void testLoginFailed() throws Exception {MockControl mc = MockControl.createControl(HttpServletRequest.class); HttpServletRequest request = (HttpServletRequest)mc.getMock();// set Mock Object behavior:request.getParameter("username");mc.setReturnValue("admin", 1);request.getParameter("password");mc.setReturnValue("1234", 1);// ok, all behaviors are set!mc.replay();// now start test:LoginServlet servlet = new LoginServlet();try {servlet.doPost(request, null);fail("Not caught exception!");}catch(RuntimeException re) {assertEquals("Login failed.", re.getMessage());}// verify:mc.verify();}仔细观察测试代码,使用 EasyMock来创建一个 Mock对象需要首先创建一个MockControl:MockControl mc = MockControl.createControl(HttpServletRequest.class);然后,即可获得 MockControl创建的Mock对象:HttpServletRequest request = (HttpServletRequest)mc.getMock();下一步,我们需要“录制”Mock对象的预期行为。

单元测试

单元测试

EasyMock与Junit的集成测试(1)EasyMock 是一套通过简单的方法对于指定的接口或类生成Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。

Mock 方法是单元测试中常见的一种技术.主要作用:模拟一些在应用中不容易构造或者比较复杂的对象,比如HttpServletRequest、Connection等,从而把测试与测试边界以外的对象隔离开,真正的形成“单元测试”,专心测试业务逻辑(各个业务分支,即各个if..else),而不会因为依赖对象对测试产生影响。

主要应用场合:一般来说,1.对于目标对象中的合作者对象,在测试时如果其状态或行为的实现严重地依赖外部资源.比如:数据库连接操作-->依赖数据库连接request请求-->依赖用户发送请求负责发送电子邮件的类-->依赖外部触发2.或者团队并行开发时,目标对象的合作者对象并没有实现.比如J2EE 中,横向分工时,负责Action 的调用Service -->若相应的Service没有实现负责Service 调用DAO 时,-->若相应的Service没有实现,这些我们就需要模仿这些类。

对于DAO层的测试--spring textContext来进行说明:可以看到的是,在Service 层与Web 层,Mock 对象能很好的被应用。

有人觉得在Persistence 层也应该使用Mock 对象,但就像我们所知道的,在使用Hibernate 、Ibatis 等ORM 工具的情况下,我们的Persistence 层的测试主要测试的就是那些配置文件、查询语句等.这时,最好是采用spring的测试框架testcontext,让其测试用例可以在不启动容器的情况下,为用例加载hibernate/ibatis/spring的配置文件,直接测试这些配置文件及数据库操作。

(2)重要的概念1.在一个完整的测试过程中,一个Mock 对象将会经历两个状态:Record 状态和Replay 状态。

java 单元测试 mock方法

java 单元测试 mock方法

java 单元测试 mock方法Java 单元测试:Mock 方法介绍在 Java 开发中,单元测试是非常重要的一环。

当我们进行单元测试时,有时候需要模拟一个方法的行为,使得测试更加灵活和可控。

在 Java 中,我们可以使用 Mock 方法来实现这个目的。

什么是 Mock 方法Mock 方法是指在单元测试中,通过一种方式替代真实的方法实现,使得我们可以在测试时模拟不同的情况。

通过 Mock 方法,我们可以精确地控制方法的返回值、抛出异常等。

Mockito 框架Mockito 是一个流行的 Java Mock 框架,它提供了丰富的 API来进行方法的模拟。

下面介绍一些常用的 Mockito 方法:1. mock()mock()方法用于创建一个模拟对象,并设置默认的行为。

示例如下:List<String> mockedList = ();2. when()when()方法用于配置模拟对象的方法行为。

我们可以使用when()方法指定方法的返回值或抛出异常。

示例如下:when((0)).thenReturn("Mockito");when((1)).thenThrow(new RuntimeException());3. verify()verify()方法用于验证模拟对象的方法是否被调用,以及调用的次数。

示例如下:verify(mockedList).get(0);verify(mockedList, times(2)).add("Mock");4. any()any()方法用于匹配任意参数。

示例如下:when((anyInt())).thenReturn("Element");PowerMock 框架在某些情况下,Mockito 无法 Mock 静态方法、私有方法等场景,这时可以使用 PowerMock 框架。

1. @PrepareForTest@PrepareForTest注解用于指定需要 Mock 的类。

PowerMock实战手册

PowerMock实战手册
1.1、PowerMock 不是重复发明轮子................................................................................. 10 1.2、PowerMock 解决了什么问题......................................................................................11 1.3、如何获得 PowerMock..................................................................................................11 1.4、如何安装 PowerMock..................................................................................................12 二、PowerMock 入门................................................................................................................... 12 2.1、使用场景......................................................................................................................... 12 2.2、PowerMock 之 HelloWorld.......................................................................................14

自动化单元测试框架EasyMock分析及其应用

自动化单元测试框架EasyMock分析及其应用

ON ANALYSIS AND ITS APPLICATION OF THE AUTOMATIC UNIT TEST FRAMEWORK EASYMOCK 作者: 陈丽萍 张勇 丁智敏
作者机构: 巢湖学院计算机与信息工程学院,安徽巢湖238000
出版物刊名: 巢湖学院学报
页码: 34-38页
年卷期: 2014年 第6期
主题词: EasyMock框架 测试驱动开发 JUnit框架 单元测试 PowerMock框架
摘要:EasyMock是一个可以和JUnit很好的集成在一起的Mock框架,它通过构建Mock对象可以减少开发代码与测试代码的耦合,快速有效的完成单元测试、分布式系统测试。

在介绍EasyMock特点、测试框架及其应用的基础上,分析了该框架的优缺点,并针对其缺点提出了相应的解决方案。

测试结果表明,注入解决方案后的EasyMock框架可以降低Mock对象的限制,应用范围更广。

EasyMock使用手册

EasyMock使用手册

EasyMock使用简明手册在实际编写unit test的过程中,很多情况下我们会需要使用其他的组件(如和数据库相关的测试)。

当我们是使用第三方提供的组件时,这并不是太大的问题,因为我们可以假设他们是无错的。

但是一旦这些组件是我们自己的组件时,问题就暴露出来了。

“单元测试出错了,但到底是谁的错。

我的?他的?”,这种情况显然违反了测试的独立性原则。

出现这种情况使得这个测试无法确切的指出是那个单元出现了问题,照成了排错的困难,而且也浪费了时间。

同时,过分的将单元的测试代码依赖于其他单元,也照成了其他一些很现实的问题:- 在所依赖的单元完成之前,无法顺利的编写单元测试。

- 产生环境的依赖性,如运行一个HttpServletRequest处理器的测试代码必须启动一个servlet容器。

所有这些问题,都可以使用Mock Object来解决。

使用它的前提是,所依赖单元的接口必须定义清楚。

而EasyMock正是为了这一目的而产生的。

使用目的通过模拟unit test所需要的组件,已达到隔离各个unit test的目的。

目前的版本1.1,它所需要的环境是jdk1.3.1以上和junit3.8.1以上。

可以从/projects/easymock/处下载。

用法1. EasyMock采用“记录-----回放”的工作模式,基本使用步骤:- 创建Mock对象的控制对象Control。

- 从控制对象中获取所需要的Mock对象。

- 记录测试方法中所使用到的方法和返回值。

- 设置Control对象到“回放”模式。

- 进行测试。

- 在测试完毕后,确认Mock对象已经执行了刚才定义的所有操作。

2. 使用举例:假设需要测试的对象是RequestUtil,所需要测试的方法为getBoolean。

此时我们需要模拟一个HttpServletRequest对象。

public void testGetStringHttpServletRequestString(){public void testGetBoolean(){//创建Mock对象的控制器MockControl control= MockControl.createControl( HttpServletRequest.class);//获取Mock对象HttpServletRequest mock= (HttpServletRequest)control.getMock();//设置getBoolean中要使用的方法和返回值control.expectAndReturn( mock.getParameter( "test"), null);//设置控制器为replay模式control.replay();//执行测试assertNull( RequestUtil.getString( mock, "test")); //确认control.verify();}}通过EasyMock,执行这段测试代码完全不需要启动一个servlet容器,在命令行的方式下即可完成,非常的方便。

mock 函数

mock 函数

Mock函数中的特定函数1. 定义在软件开发中,Mock函数是一种用于模拟测试中依赖项的行为的技术。

Mock函数可以用来替换调用实际的依赖项,以模拟对该依赖项的调用并返回预先定义的结果。

Mock函数可以帮助我们在测试中隔离被测系统的各个组件,在没有真实依赖项的情况下测试系统的各个部分。

Mock函数的定义及用法可以根据具体的开发语言和测试框架的不同而略有差异,本文主要以Python中的unittest.mock库为例进行解释。

2. 用途Mock函数的主要用途是在单元测试中模拟依赖项的行为。

在传统的单元测试中,为了测试一个函数或方法,我们通常需要在测试代码中实例化和配置一些依赖项。

这种方式可能会导致以下几个问题:•依赖项的创建和配置可能很麻烦,需要编写大量的测试代码;•依赖项的行为可能不可预知或不稳定,导致测试结果不确定;•依赖项的调用可能涉及到一些非功能性的操作,比如网络请求、文件读写等,会使测试变得缓慢、不可靠、难以重复。

Mock函数可以帮助我们解决这些问题。

通过使用Mock函数,我们可以轻松地创建、配置和使用一个模拟的依赖项,以便更有效地进行单元测试。

具体来说,Mock函数可以用于以下几种情况:模拟函数的返回值Mock函数可以用来替代某个函数的调用,并返回我们预先定义的结果。

这在我们需要测试一个函数对不同情况的处理能力时非常有用。

例如,我们可以使用Mock函数模拟一个网络请求的返回结果,以确保被测函数能正确地处理各种网络请求的响应。

模拟函数的调用Mock函数可以被配置为记录自己的调用信息,包括传入的参数和调用的次数。

这对于需要验证某个函数是否被正确调用、被调用的次数是否正确等情况非常有用。

例如,我们可以使用Mock函数来模拟一个文件写入函数的调用,并验证被测函数是否正确地调用了该函数。

模拟异常的抛出Mock函数还可以被配置为在被调用时抛出一个指定的异常。

这对于测试被测函数在异常情况下的处理能力非常有用。

Ch5-a-EasyMock

Ch5-a-EasyMock

EasyMock概述
• EasyMock 是一套通过简单的方法对于指定的接口 或类生成 Mock 对象的类库,它能利用对接口或 类的模拟来辅助单元测试 • 编写自定义的 Mock 对象需要额外的编码工作, 同时也可能引入错误。EasyMock 提供了根据指定 接口动态构建 Mock 对象的方法,避免了手工编 写 Mock 对象 • EasyMock只是众多Mock框架中的一种
• 安装EasyMock
EasyMock 是采用 MIT license 的开源项目, 可以在 Sourceforge 上下载相关 zip 文件 在解压缩 zip 包后,可以找到 easymock.jar 文件 把 easymock.jar 添加到项目的 Libraries 里 就可以使用了
使用EasyMock
• 将 Mock 对象切换到 Replay 状态
使用 Mock 对象进行实际的测试前需要将对象 的状态切换为 Replay,这样 Mock 对象才能够 根据设定对特定的方法调用作出预期的响应 通过 org.easymock.EasyMock 类所提供的静态 方法 replay() :
Eclipse操作演示
• 测试对象
UserManager(需要mock UserDao对象)
• 演示步骤
创建项目,导入基本接口和类 新建测试类 编写测试方法(其中包括 Mock 处理) 运行
使用EasyMock
• 对 Mock 对象的行为进行验证
测试完成后,应对 Mock 对象的方法调用的次 数进行验证,这也是被测单元行为的一部分 通过 org.easymock.EasyMock 类所提供的静态 方法 verify() :
verify(somemock);

easyhook 例子-概述说明以及解释

easyhook 例子-概述说明以及解释

easyhook 例子-概述说明以及解释1.引言1.1 概述EasyHook是一个开源的Windows API Hooking 框架,它的设计目标是为了允许开发者在不修改原始代码的情况下,对已编译的应用程序或系统功能进行拦截和修改。

通过使用EasyHook,开发者可以实现对目标应用程序中指定函数的替换、监视和自定义功能的注入。

API Hooking是一种常见的技术,它通过拦截目标应用程序与操作系统之间的函数调用,使得我们可以截获这些函数的输入参数和返回值,并且可以在这些函数被调用前后做一些自定义的操作。

而EasyHook作为一个底层Hooking框架,提供了一套简单易用的API,帮助我们快速、方便地实现Hook功能。

与其他Hooking解决方案相比,EasyHook具有以下几个优点。

首先,它采用用户模式Hook的方式,不需要特权访问,因此可以安全地运行在普通用户账户下。

其次,EasyHook提供了友好的编程接口和详细的文档,降低了学习和使用的门槛。

再次,EasyHook支持跨平台,可以用于Windows XP到Windows 10的各个版本,并且还支持32位和64位应用程序。

此外,EasyHook还支持在不同的.NET Framework版本中使用,提供了强大而灵活的功能,使得开发人员能够快速解决各种Hooking问题。

EasyHook的使用场景非常广泛,例如:调试和逆向工程、性能分析、安全审计、游戏模块注入等。

它可以帮助我们监视和改变目标应用程序的行为,甚至可以在运行时动态修改应用程序的行为,从而满足我们的个性化需求。

在本文中,我们将介绍EasyHook框架的基本原理和使用方法,并分析其在实际应用中的优势和特点。

最后,我们将总结EasyHook的应用价值,展望和探讨其未来的发展方向。

通过对EasyHook的深入学习和实践,相信读者能够更好地掌握Hooking技术,并在实际项目中灵活运用。

1.2文章结构1.2 文章结构本文将按照以下结构来叙述和探讨easyhook的例子和使用方法:1. 引言:对easyhook进行简要介绍,并解释文章涉及的目的和意义。

mock测试

mock测试

Mock测试 Mock测试
借助于mock对象,我们就可以解决上面 借助于mock对象,我们就可以解决上面 提到的所有问题。在使用mock对象进行测试 提到的所有问题。在使用mock对象进行测试 的时候,总共有3个关键步骤,分别是: 的时候,总共有3个关键步骤,分别是: 1.使用一个接口来描述这个对象。 1.使用一个接口来描述这个对象。 2.为产品代码实现这个接口。 2.为产品代码实现这个接口。 3.以测试为目的,在mock对象中实现这个接 3.以测试为目的,在mock对象中实现这个接 口。
Mock测试 Mock测试
测试代码如下: 测试代码如下: package example; import junit.framework.*; import java.util.Calendar; import example.eninterface.MockSystemEnvironment; public class TestChecker extends TestCase { public void testQuittingTime(){ MockSystemEnvironment env = new MockSystemEnvironment(); //设置一个目标测试时间16:55 //设置一个目标测试时间16: Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2004); cal.set(Calendar.MONTH, 10); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 16); cal.set(Calendar.MINUTE, 55); long t1 = cal.getTimeInMillis();

mock injectmocks创建的实例中的方法

mock injectmocks创建的实例中的方法

mock injectmocks创建的实例中的方法全文共四篇示例,供读者参考第一篇示例:Mockito是一个常用的Java测试框架,它可以帮助开发人员进行单元测试和集成测试。

在使用Mockito进行测试时,我们经常会碰到Mockito的@InjectMocks和@Mock注解。

@Mock注解可以用来创建一个模拟对象,而@InjectMocks注解则可以将模拟对象注入到被测试类中。

在Mockito中,@Mock注解用来创建一个模拟对象,也就是我们常说的mock对象。

使用@Mock注解可以方便我们创建一个虚拟的对象,以模拟真实对象的行为。

我们可以通过模拟对象的when和willReturn方法来设置模拟对象的行为,从而让模拟对象按照我们期望的方式运行。

而@InjectMocks注解则用来注入模拟对象到被测试类中。

通过@InjectMocks注解,我们可以将模拟对象注入到被测试类中,从而让我们能够测试被测试类与模拟对象之间的交互。

@InjectMocks注解会自动将模拟对象注入到被测试类的构造方法、属性或者setter方法中。

Mockito的@InjectMocks和@Mock注解是很方便的测试工具。

通过使用这两个注解,我们可以更加方便地进行单元测试和集成测试,验证我们的代码逻辑是否正确。

希望开发人员能够熟练掌握Mockito框架,提高测试效率,保证代码质量。

第二篇示例:Mockito 是一个在Java 程序中进行单元测试时非常常用的框架。

它提供了一种方便的方式来模拟对象以及对象之间的交互,从而简化了单元测试的编写过程。

其中一个常用的功能就是使用@Mock 注解来创建一个模拟对象,并使用@InjectMocks 注解来将模拟对象注入到被测试对象中。

在Mockito 中,@Mock 注解用于创建一个模拟对象,这个模拟对象的行为可以由程序员自由定义。

我们可以通过调用when().thenReturn() 方法来指定在某个方法被调用时返回特定的值。

easymock技术手册

easymock技术手册

EasyMock使用说明Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。

编写自定义的Mock 对象需要额外的编码工作,同时也可能引入错误。

EasyMock 提供了根据指定接口动态构建Mock 对象的方法,避免了手工编写Mock 对象。

本文将向您展示如何使用EasyMock 进行单元测试,并对EasyMock 的原理进行分析。

1.Mock 对象与 EasyMock 简介1.1.单元测试与 Mock 方法单元测试是对应用中的某一个模块的功能进行验证。

在单元测试中,我们常遇到的问题是应用中其它的协同模块尚未开发完成,或者被测试模块需要和一些不容易构造、比较复杂的对象进行交互。

另外,由于不能肯定其它模块的正确性,我们也无法确定测试中发现的问题是由哪个模块引起的。

Mock 对象能够模拟其它协同模块的行为,被测试模块通过与Mock 对象协作,可以获得一个孤立的测试环境。

此外,使用Mock 对象还可以模拟在应用中不容易构造(如HttpServletRequest 必须在Servlet 容器中才能构造出来)和比较复杂的对象(如JDBC 中的ResultSet 对象),从而使测试顺利进行。

1.2.EasyMock 简介手动的构造 Mock 对象会给开发人员带来额外的编码量,而且这些为创建 Mock 对象而编写的代码很有可能引入错误。

目前,有许多开源项目对动态构建 Mock 对象提供了支持,这些项目能够根据现有的接口或类动态生成,这样不仅能避免额外的编码工作,同时也降低了引入错误的可能。

EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。

它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。

通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。

mock的使用,easy-mock使用方法详解

mock的使用,easy-mock使用方法详解

mock的使⽤,easy-mock使⽤⽅法详解mock的重要性mock就是对某些不容易构造或者不容易获取的对象,⽤⼀个虚拟的对象来创建的⽅法。

项⽬开发和测试过程中,遇到以下的情况,就需要模拟结果返回;1.当另⼀⽅接⼝或服务还未完成,阻碍项⽬进度时,可以通过mock的⽅式,实现并发开发;2.接⼝不满⾜⽬前的测试需求,虽然接⼝已经实现,但是个别字段/返回不满⾜测试要求;mock数据实现⽅式:a) 使⽤moco,运⾏moco需要java环境和moco的jar包;可参考b) 使⽤easy-mock,easymock根据其官⽹的解释是⼀个在线的可视化⽣产模拟数据的在线服务;easy-mock官⽹注册⽤户;easy-mock官⽹,时常登录不进去;本⼈在centos7下,使⽤docker-compose搭建了easy-mock;a) 登录成功之后,点击‘+’,创建项⽬;b) 填写信息,项⽬名和url都是按照⾃⼰的意愿来填写,这会为最后⽣成的api数据接⼝提供地址;c)在刚新增的项⽬下,创建接⼝;d)写下mock的代码准备⼯作Mock.js的语法规范a) 数据模板中的每个属性由3部分构成:属性名|⽣成规则:属性值;'name|rule':value;b) 数据占位只在属性值字符串中占个位置,并不出现在最终的属性值中;@占位符;如,first: '@FIRST',学习mock.js语法可以参考:Easy Mock重点来了,现在正式开始常见使⽤⽅式;a)静态数据使⽤postman,访问上⾯的接⼝;b)动态数据结合Mock.js的语法,将json改造⼀下,可以⽣成随机数据,这样就避免了每次都是⼀样的假数据,⽐较符合真实的开发场景;访问结果:{"code": 0,"message": "success","update_time": "2020-03-23 14:13:35","date": [{"id": "350000************","wechat_id": "uvejr","phone": "183********","name": "易平","index": 0},{"id": "710000************","wechat_id": "edwlf","phone": "14716374632","name": "郑芳","index": 1},{"id": "120000************","wechat_id": "kwqzr","phone": "14602287701","name": "邹刚","index": 2},{"id": "320000************","wechat_id": "pdizh","phone": "182********","name": "邵军","index": 3},{"id": "510000************","wechat_id": "qfqib","phone": "156********","name": "刘超","index": 4},{"id": "430000************","wechat_id": "dxdit","phone": "173********","name": "张杰","index": 5},{"id": "630000************","wechat_id": "orstl","phone": "184********","name": "潘芳","index": 6},{"id": "820000************","wechat_id": "cqnwa","phone": "175********","name": "蒋超","index": 7},{"id": "500000************","wechat_id": "pfhhj","phone": "14645062242","name": "钱洋", "index": 8},{"id": "360000************", "wechat_id": "ybqxh", "phone": "186********", "name": "吕涛", "index": 9},{"id": "410000************", "wechat_id": "etjjx", "phone": "157********", "name": "赖霞", "index": 10},{"id": "210000************", "wechat_id": "likhn", "phone": "178********", "name": "沈霞", "index": 11},{"id": "540000************", "wechat_id": "kjfid", "phone": "139********", "name": "邓娟", "index": 12},{"id": "130000************", "wechat_id": "qtxdi", "phone": "152********", "name": "范秀英", "index": 13},{"id": "500000************", "wechat_id": "cmtvi", "phone": "153********", "name": "⾦军", "index": 14},{"id": "340000************", "wechat_id": "nbacn", "phone": "157********", "name": "傅秀英", "index": 15},{"id": "340000************", "wechat_id": "tdygr", "phone": "17188330258", "name": "吴超", "index": 16},{"id": "540000************", "wechat_id": "osodq", "phone": "14704726452", "name": "任娟", "index": 17},{"id": "330000************", "wechat_id": "sviuj", "phone": "159********", "name": "段娟", "index": 18},{"id": "430000************", "wechat_id": "cyalv", "phone": "185********", "name": "徐涛", "index": 19}]}c) 响应式数据可以模拟真实的接⼝⼀样,根据传⼊的参数不同获取对应的数据;使⽤postman访问接⼝;不加参数,加参数,错误的请求⽅式;easy mock 快速⽣成数据字段,及常⽤语法;1234567891011121314151617181920212223242526272829303132333435363738394041{"cname": "@cname",//中⽂⼈名"id": "@id",//⽣成20 位数字"title": "@ctitle",//中⽂title"city": "@city",//中⽂城市"ip": "@ip",//ip 地址"email": "@email",//email"url": "@url",//url"cfirst": "@cfirst",//姓名,姓"clast": "@clast",//姓名,名"cword": "@cword('123456')",//123456 从中选取⼀个字符"csentence": "@csentence(1,5)",//⽂字⽂段"csentence5": "@csentence(5)",//⽂字⽂段"cparagraph": "@cparagraph(1,3)",//⽂字⽂段"string": "@string(11)",//输出11 个字符长度的字符串"float": "@float(0,10)",//0 到 10 的浮点数"int": "@integer(60,70)",//60 到 70 之间的整数"boolean": "@boolean",//boolean 类型 true,false"array|1-3": [{"id": "@integer(1,10)",//整数 1到10 取整数"name": "cname"}],//数组(随机 1 到3个)"array_sort_add|+1": ["1", "2", "3"],//数组1,2,3轮询输出"boolean|1-2": true,//boolean 类型 true,false"actionType|1": ['click_url', 'open_resource_detail', 'open_resource_search'],"payload": function() {var returnClickUrl = {"linkUrl": "/apph5"};var returnResourceDetail = {"resourceId": "606"};var returnResourceSearch = {"keyWords": "","tagCategory": "1","tag": "1"};var s = this.actionType == 'click_url' ? returnClickUrl : this.actionType == 'open_resource_detail' ? returnResourceDetail : returnResourceSearch; return s;预期返回如下数据;⽅式⼀、使⽤easymock构造;⽅式⼆、使⽤jmeter的 beanshell sampler;运⾏该请求,查看‘察看结果树’;。

mock void 方法

mock void 方法

mock void 方法(原创实用版4篇)目录(篇1)1.介绍 mock void 方法的概念和作用2.讲解如何使用 mock void 方法3.分析 mock void 方法的优缺点4.总结 mock void 方法在编程中的应用场景正文(篇1)一、mock void 方法的概念和作用在编程中,我们常常需要对某些函数或方法进行模拟,以实现测试、调试等目的。

尤其是在编写单元测试时,为了隔离测试对象,避免外部环境对测试结果的影响,我们需要使用 mock 函数。

void 类型的 mock 函数称为 mock void 方法,它可以模拟一个 void 类型的函数,帮助我们更好地进行单元测试。

二、如何使用 mock void 方法要使用 mock void 方法,首先需要引入相关的 mock 库。

以 Python 语言为例,我们可以使用`unittest`库中的`Mock`类来创建一个 mock void 方法。

下面是一个简单的示例:```pythonimport unittestfrom unittest.mock import Mockclass TestMyFunction(unittest.TestCase):def test_my_function(self):mock_function = Mock()mock_function.return_value = None# 使用 mock_function 替换真实的函数my_function(mock_function)# 验证 mock_function 是否被调用mock_function.assert_called_once()if __name__ == "__main__":unittest.main()```在这个示例中,我们使用`Mock`类创建了一个 mock void 方法`mock_function`,并将其传递给`my_function`。

easymock使用方法

easymock使用方法

使用静态import方法利用easymock测试ResultSet接口:package main;import static org.easymock.EasyMock.*;import java.sql.ResultSet;import java.sql.SQLException;public class A {public static void main(String[] args) {ResultSet mockResultSet=createMock(ResultSet.class);try {mockResultSet.next();expectLastCall().andReturn(true);mockResultSet.getString(1);expectLastCall().andReturn("123");mockResultSet.next();expectLastCall().andReturn(false);replay(mockResultSet);while(mockResultSet.next()){String s=mockResultSet.getString(1);System.out.println("您的输出是:"+s);}verify(mockResultSet);} catch (SQLException e) {e.printStackTrace();}}}使用静态方法引入会导致不必要的错觉,无法也就是无法区分到底该方法调用属于哪一个类,因此下面使用类.静态方法的调用方式:package main;import org.easymock.EasyMock;import java.sql.ResultSet;import java.sql.SQLException;public class A {public static void main(String[] args) {ResultSet mockResultSet=EasyMock.createMock(ResultSet.class);try {mockResultSet.next();EasyMock.expectLastCall().andReturn(true);mockResultSet.getString(1);EasyMock.expectLastCall().andReturn("ok,call success");mockResultSet.next();EasyMock.expectLastCall().andReturn(false);EasyMock.replay(mockResultSet);while(mockResultSet.next()){System.out.println(mockResultSet.getString(1));}EasyMock.verify(mockResultSet);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}除了使用easymock类进行创建测试,还可以使用使用IMockControl接口进行,要得到该接口的实例,需要使用EasyMock.createControl方法得到:package main;import org.easymock.EasyMock;import org.easymock.IMocksControl;import java.sql.ResultSet;import java.sql.SQLException;public class A {public static void main(String[] args)throws Exception {IMocksControl imc=EasyMock.createControl();ResultSet mockResultSet=imc.createMock(ResultSet.class);mockResultSet.next();EasyMock.expectLastCall().andReturn(true).times(2);EasyMock.expectLastCall().andReturn(false).times(1);mockResultSet.getString("name");EasyMock.expectLastCall().andReturn("xcl");EasyMock.expectLastCall().andReturn("ljc");mockResultSet.getString("cname");EasyMock.expectLastCall().andReturn("XCL");EasyMock.expectLastCall().andReturn("LJC");imc.replay();while(mockResultSet.next()){System.out.println("英文名:"+mockResultSet.getString("name")+",中文姓名:"+mockResultSet.getString("cname"));}imc.verify();System.out.println("===============================");//imc.reset();mockResultSet.next();EasyMock.expectLastCall().andReturn(true).times(1);EasyMock.expectLastCall().andReturn(false).times(1);mockResultSet.getString("name");EasyMock.expectLastCall().andReturn("苹果");mockResultSet.getDouble("price");EasyMock.expectLastCall().andReturn(123.456);imc.replay();while(mockResultSet.next()){System.out.println("水果名称:"+mockResultSet.getString("name")+",价格:"+mockResultSet.getDouble("price"));}imc.verify();}}将Mock的挡板添加到Junit中进行测试:package main;import java.sql.ResultSet;import junit.framework.TestCase;import org.easymock.EasyMock;import org.easymock.IMocksControl;import org.junit.Test;interface AI{public String getName();public String getCname();}class AIIMPL implements AI{private String name=null;private String cname=null;public AIIMPL(ResultSet rs) throws Exception{ = rs.getString("name");ame = rs.getString("cname");}@Overridepublic String getName() {return ;}@Overridepublic String getCname() {return ame;}}public class A extends TestCase{private static A a = new A();@Testpublic void testAT() throws Exception{IMocksControl imc=EasyMock.createControl();ResultSet mockResultSet=imc.createMock(ResultSet.class);mockResultSet.next();EasyMock.expectLastCall().andReturn(true).times(2);EasyMock.expectLastCall().andReturn(false).times(1);mockResultSet.getString("name");EasyMock.expectLastCall().andReturn("xcl");EasyMock.expectLastCall().andReturn("ljc");mockResultSet.getString("cname");EasyMock.expectLastCall().andReturn("XCL");EasyMock.expectLastCall().andReturn("LJC");imc.replay();String[] actual=new String[]{"XCL","LJC"};int i=0;while(mockResultSet.next()){//将mockResultSet作为参数,作为一个接口实现类的构造函数参数//调用junit断言AI ai=new AIIMPL(mockResultSet);assertEquals(actual[i++], ai.getCname());//break; //打开这个注释将会断言失败}imc.verify();}public static void main(String[] args)throws Exception { new A().testAT();}}此外EasyMock也可以设置抛出异常:package main;import java.io.FileNotFoundException;import java.sql.ResultSet;import java.sql.SQLException;import junit.framework.TestCase;import org.easymock.EasyMock;import org.easymock.IMocksControl;import org.junit.Test;interface AI{public String getName();public String getCname();}class AIIMPL implements AI{private String name=null;private String cname=null;public AIIMPL(ResultSet rs) throws Exception{ = rs.getString("name");ame = rs.getString("cname");System.out.println("姓名:"++",中文名:"+ame);}@Overridepublic String getName() {return ;}@Overridepublic String getCname() {return ame;}}public class A extends TestCase{@Testpublic void testAT() throws Exception{//找不到测试实例的原因是因为测试方法的返回值不是void或其方法不是以test开头IMocksControl imc=EasyMock.createControl();ResultSet mockResultSet=imc.createMock(ResultSet.class);mockResultSet.next();EasyMock.expectLastCall().andReturn(true).times(2);EasyMock.expectLastCall().andReturn(false).times(1);mockResultSet.getString("name");//设置返回相同的值//EasyMock.expectLastCall().andStubReturn("xcl");//EasyMock.expectLastCall().andReturn("xcl");//EasyMock.expectLastCall().andReturn("ljc");//设定抛出异常EasyMock.expectLastCall().andReturn("xcl");EasyMock.expectLastCall().andThrow(new SQLException("进入我设定的错误-文件没有找到-因为名字是ljc"));//设定抛出异常mockResultSet.getString("cname");EasyMock.expectLastCall().andReturn("XCL");EasyMock.expectLastCall().andReturn("LJC");imc.replay();String[] actual=new String[]{"XCL","LJC"};int i=0;while(mockResultSet.next()){//将mockResultSet作为参数,作为一个接口实现类的构造函数参数//调用junit断言AI ai=null;try{ai=new AIIMPL(mockResultSet);}catch (SQLException e) {e.printStackTrace();System.err.println("很抱歉的通知您,发生了SQL异常");}catch(Exception ee){ee.printStackTrace();System.err.println("很抱歉的通知您,发生了未知异常");}assertEquals(actual[i++], ai.getCname());//break; //打开这个注释将会断言失败}imc.verify();}public static void main(String[] args)throws Exception { new A().testAT();}}可以对mock对象的执行参数设置参数匹配器:package main;import java.sql.Statement;import java.sql.ResultSet;import org.easymock.EasyMock;import org.easymock.IMocksControl;//测试easymock在调用statement的时候判断调用是否为空,数值是否相等,是否匹配正则表达式,以及使用自定义参数匹配器public class A{public static void main(String[] args)throws Exception { IMocksControl imc=EasyMock.createControl();ResultSet rset=imc.createMock(ResultSet.class);rset.next();EasyMock.expectLastCall().andReturn(true).times(3);EasyMock.expectLastCall().andReturn(false).times(1);rset.getString(1);EasyMock.expectLastCall().andStubReturn("中国");rset.getString(2);EasyMock.expectLastCall().andStubReturn("美国");Statement st=imc.createMock(Statement.class);//st.executeQuery((String)EasyMock.matches(".*[xX][cC]l.*") );//正则表达式//st.executeQuery((String)EasyMock.notNull());//不为空//st.executeQuery((String)EasyMock.isNull());//为空st.executeQuery((String)EasyMock.startsWith("osa"));//字符串以什么开头EasyMock.expectLastCall().andReturn(rset);imc.replay();ResultSet myrs=st.executeQuery("osafdXClsdf");while(rset.next()){System.out.println(myrs.getString(1)+","+myrs.getString(2)) ;}imc.verify();}}也可以对mock对象的执行方法设置自定义参数匹配器:package main;import java.sql.Statement;import java.sql.ResultSet;import org.easymock.EasyMock;import org.easymock.IArgumentMatcher;import org.easymock.IMocksControl;//测试easymock在调用statement的时候判断调用是否为空,数值是否相等,是否匹配正则表达式,以及使用自定义参数匹配器class REG implements IArgumentMatcher{private String in=null;public REG(String in){this.in=in;}@Overridepublic void appendTo(StringBuffer arg0) {arg0.append("I am sorry to tell you that REG matches error");}@Overridepublic boolean matches(Object arg0) {//带入的是实际参数String actual=(String)arg0;return in.toUpperCase().equals(actual.toUpperCase());}}public class A{public static String sqlEquals(String in) {//将自定义参数匹配器报告给EasyMockEasyMock.reportMatcher(new REG(in));return in;}public static void main(String[] args)throws Exception { IMocksControl imc=EasyMock.createControl();ResultSet rset=imc.createMock(ResultSet.class);rset.next();EasyMock.expectLastCall().andReturn(true).times(3);EasyMock.expectLastCall().andReturn(false).times(1);rset.getString(1);EasyMock.expectLastCall().andStubReturn("中国");rset.getString(2);EasyMock.expectLastCall().andStubReturn("美国");Statement st=imc.createMock(Statement.class);//st.executeQuery((String)EasyMock.matches(".*[xX][cC]l.*") );//正则表达式//st.executeQuery((String)EasyMock.notNull());//不为空//st.executeQuery((String)EasyMock.isNull());//为空//st.executeQuery((String)EasyMock.startsWith("osa"));//字符串以什么开头st.executeQuery(sqlEquals("select * from student"));EasyMock.expectLastCall().andReturn(rset);imc.replay();ResultSet myrs=st.executeQuery("SELect * from STUdent");while(rset.next()){System.out.println(myrs.getString(1)+","+myrs.getString(2)) ;}imc.verify();}}使用easymock测试自定义接口:package main;import java.awt.image.ImageConsumer;import java.util.ArrayList;import java.util.List;import junit.framework.TestCase;import org.easymock.EasyMock;import org.easymock.IArgumentMatcher;import org.easymock.IMocksControl;import org.junit.Test;class Employee implements Comparable<Employee>{private String name;private int age;public Employee() {}public Employee(String name, int age) {super(); = name;this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int compareTo(Employee o) {//重写一个比较方法return this.age-o.getAge();}public void display(){System.out.println("姓名:"++",年龄:"+this.age);}}interface EmployeeDAO{public boolean addEmployee(Employee e);public boolean updateEmployee(Employee e);public boolean deleteEmployee(Employee e);public Employee getEmployeeByName(String name);public List<Employee> getAllEmployees();}class EmployeeDAOImpl implements EmployeeDAO{//在该类中使用EasyMock实现操作@Overridepublic boolean addEmployee(Employee e) {return false;}@Overridepublic boolean updateEmployee(Employee e) {return false;}@Overridepublic boolean deleteEmployee(Employee e) {return false;}@Overridepublic Employee getEmployeeByName(String name) {return null;}@Overridepublic List<Employee> getAllEmployees() {return null;}}//测试easymock在调用statement的时候判断调用是否为空,数值是否相等,是否匹配正则表达式,以及使用自定义参数匹配器class EmployeeEquals implements IArgumentMatcher{Employee expected=null;public EmployeeEquals(Employee expected){this.expected=expected;}@Overridepublic void appendTo(StringBuffer arg0) {arg0.append("I am sorry to tell you that Employee Matches Error");}@Overridepublic boolean matches(Object arg0) {Employee actual=(Employee)arg0;return pareTo(actual)==0;}}public class A extends TestCase{@Testpublic void testA(){IMocksControl imc=EasyMock.createControl();EmployeeDAO empDao=imc.createMock(EmployeeDAO.class);//增加员工empDao.addEmployee((Employee)EasyMock.anyObject());EasyMock.expectLastCall().andReturn(true);//删除员工empDao.deleteEmployee((Employee)EasyMock.anyObject());EasyMock.expectLastCall().andReturn(false);//更新员工empDao.updateEmployee((Employee)EasyMock.anyObject());EasyMock.expectLastCall().andReturn(false);//根据名字查找empDao.getEmployeeByName("xcl");EasyMock.expectLastCall().andReturn(newEmployee("xcl",20));//返回所有List<Employee> emps=new ArrayList<Employee>();emps.add(new Employee("xcl",20));emps.add(new Employee("ljc",30));empDao.getAllEmployees();EasyMock.expectLastCall().andReturn(emps);imc.replay();if(empDao.addEmployee(new Employee("xcl",20))){System.out.println("成功增加xcl");}else{System.err.println("增加xcl失败");}if(empDao.deleteEmployee(new Employee("lyy",20))){ System.out.println("成功删除lyy");}else{System.err.println("删除lyy失败");}if(empDao.updateEmployee(new Employee("lyy",20))){ System.out.println("成功更新lyy");}else{System.err.println("更新lyy失败");}Employee xcl=empDao.getEmployeeByName("xcl");if(xcl!=null)xcl.display();else System.err.println("未找到xcl");List<Employee> all=empDao.getAllEmployees();for(Employee ee:all){ee.display();}imc.verify();}public static void main(String[] args)throws Exception {//测试Employee的比较//假设程序现在需要对员工进行增删改查//第一种方法就是操作EmployeeDAOImpl类,在该类中使用EasyMock 进行测试//第二种方法是使用EmployeeDAO进行测试new A().testA();}}使用EasyMock扩展包对某一个类进行测试:请参考这个例子:/developerworks/cn/opensource/os-cn-easymock /。

EasyMock使用说明

EasyMock使用说明

EasyMock使用说明开发环境版本JDK 1.5JUnit 3.8EasyMock 2.2Eclipse 3.1.2MyEclipse 4.1.0注:EasyMock2.0+只支持JDK1.5+,因为其代码中用到了很多新增特性,比如for(:)、method(...)等用法。

EasyMock最初的1.0版本似乎支持对实体类的模拟,但是貌似在很面的版本中和快就取消了这个功能。

EasyMock介绍EasyMock官方页面EasyMock provides Mock Objects for interfaces in JUnit tests by generating them on the fly using Java's proxy mechanism. Due to EasyMock's unique style of recording expectations, most refactorings will not affect the Mock Objects. So EasyMock is a perfect fit for Test-Driven Development.EasyMock是用于JUnit中的虚拟测试辅助包,它提供对interface类的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令mock对象返回指定的值或抛出指定异常。

下载及安装EasyMock是放在sourceforge上的一个开源项目,可以自由下载,从那里下载到对应版本的压缩包后可以直接解压,对于开发,我们只需要easymock.jar这个文件,把它添加到Eclipse的项目jar库里就可以使用了。

另外,由于它是用于在JUnit环境下测试的包,所以在实际使用的时候还需要添加JUnit.jar概念准备在正式编程之前,还需要搞懂一些相关概念,这些有的也是类的名字,但是在这里主要是理解他所代表的概念,方便进一步使用EasyMock。

Java代码规范检查工具推荐:统一代码风格的工具推荐

Java代码规范检查工具推荐:统一代码风格的工具推荐

Java代码规范检查工具推荐:统一代码风格的工具推荐在软件开发中,代码规范是非常重要的一环。

一个良好的代码风格不仅可以提高代码的可读性和可维护性,还能够减少潜在的bug和错误。

为了帮助开发者统一代码风格,许多Java代码规范检查工具应运而生。

本文将介绍几款常用的Java代码规范检查工具,并对它们的特点和使用方法进行简要的分析。

1. CheckstyleCheckstyle是一个功能强大的Java代码规范检查工具,它可以帮助开发者检查代码中的各种风格问题,如命名规范、缩进、代码注释等。

Checkstyle支持多种配置方式,可以根据项目的需求进行灵活的配置。

此外,Checkstyle还提供了丰富的扩展点,可以自定义检查规则和报告格式。

使用Checkstyle非常简单,只需在项目中配置Checkstyle插件,并在构建过程中运行Checkstyle任务即可。

Checkstyle会对代码进行静态分析,并生成详细的报告,指出代码中存在的风格问题。

开发者可以根据报告中的提示,及时修改代码,以符合规范。

2. PMDPMD是另一款常用的Java代码规范检查工具,它可以帮助开发者发现代码中的潜在问题和错误。

PMD支持多种规则集,包括基本规则、代码风格规则、性能规则等,可以根据项目的需求进行选择。

PMD还提供了丰富的扩展点,可以自定义规则和报告格式。

使用PMD也非常简单,只需在项目中配置PMD插件,并在构建过程中运行PMD任务即可。

PMD会对代码进行静态分析,并生成详细的报告,指出代码中存在的问题。

开发者可以根据报告中的提示,及时修复代码中的问题,以提高代码的质量。

3. FindBugsFindBugs是一个专注于发现Java代码中潜在bug的工具。

它使用静态分析技术,对代码进行深入的检查,以识别可能导致错误的代码模式。

FindBugs支持多种规则集,包括基本规则、可疑代码规则、性能规则等,可以根据项目的需求进行选择。

easy-mock介绍

easy-mock介绍

easy-mock介绍今天推荐⼀个好⽤的前端 mock ⼯具,Easy Mock,⽬前由⼤搜车⽆线架构团队进⾏维护,让我觉得特别好⽤的⼀点是 它⽀持swagger(⼀个能称为框架的 API 书写⼯具),并能够基于 Swagger 快速创建项⽬(酷),使⽤ easy-mock 你需要具备⼏个相关⼯具或者知识,(mock.js语法,本地部署的话需要基本的node/npm/git操作,当然你可以完全不必要这么做,它的在线服务做的很好);下⾯是 easy-mock 的官⽅⽂档介绍。

正⽂~~~介绍如果没有内⽹部署的条件,推荐使⽤。

Easy Mock 是⼀个可视化,并且能快速⽣成模拟数据的持久化服务。

特性⽀持接⼝代理⽀持快捷键操作⽀持协同编辑⽀持团队项⽬⽀持 RESTful⽀持 | OpenAPI Specification ( & & )基于 Swagger 快速创建项⽬⽀持显⽰接⼝⼊参与返回值⽀持显⽰实体类⽀持灵活性与扩展性更⾼的响应式数据开发⽀持⾃定义响应配置(例:status/headers/cookies)⽀持 语法⽀持 ⽅式的接⼝预览链接- 基于 Easy Mock 快速⽣成 api.js 的命令⾏⼯具。

快速开始在开始之前,假设你已经成功安装了 (>= v8.9)& (>= v3.4)& (>= v4.0)。

$ git clone https:///easy-mock/easy-mock.git$ cd easy-mock && npm install找到 config/default.json,或者创建⼀个 config/local.json ⽂件,将如下需要替换的字段换成⾃⼰的配置即可。

不同环境会加载不同的配置⽂件,在此之前你应该对 有所了解。

{"port": 7300,"host": "0.0.0.0","pageSize": 30,"proxy": false,"db": "mongodb://localhost/easy-mock","unsplashClientId": "","redis": {"keyPrefix": "[Easy Mock]","port": 6379,"host": "localhost","password": "","db": 0},"blackList": {"projects": [], // projectId,例:"5a4495e16ef711102113e500""ips": [] // ip,例:"127.0.0.1"},"rateLimit": { // https:///koajs/ratelimit"max": 1000,"duration": 1000},"jwt": {"expire": "14 days","secret": "shared-secret"},"upload": {"types": [".jpg", ".jpeg", ".png", ".gif", ".json", ".yml", ".yaml"],"size": 5242880,"dir": "../public/upload","expire": {"types": [".json", ".yml", ".yaml"],"day": -1}},"ldap": {"server": "", // 设置 server 代表启⽤ LDAP 登录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

The following examples use the interface Collaborator : 以下例子使用Collaborator 接口:
package org.easymock.samples; public interface Collaborator { void documentAdded(String title); void documentChanged(String title); void documentRemoved(String title); byte voteForRemoval(String title); byte[] voteForRemovals(String[] title); } Implementors of this interface are collaborators (in this case listeners) of a class named ClassUnderTest : 这个接口的实现者就是ClassUnderTest 类的协作者(此例中为listeners): public class ClassUnderTest { // ... public void addListener(Collaborator listener) { // ... } public void addDocument(String title, byte[] document) { // ... } public boolean removeDocument(String title) { // ... } public boolean removeDocuments(String[] titles) { // ... } } The code for both the class and the interface may be found in the package org.easy mock.samples in samples.zip . 类和接口的代码都可以在samples.zip 的org.easy mock.samples 包中找到。
Writing and maintaining Mock Objects often is a tedious task that may introduce errors. EasyMock 2 generates Mock Objects dynamically - no need to write them, and no generated code! 编写和维护模拟对象常常是一件很无聊却又容易出错的工作。EasyMock 2能动态生成模拟对象—— 不需要 编写模拟对象的代码,因此也不会产生生成代码!
The source code of EasyMock is stored in the zip file src.zip . EasyMock的源代码储存在src.zip 文件中。
Usage - 使用
Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. In a lot of cases, we do not care about using collaborators in unit testing, as we trust these collaborators. If we do care about it, Mock Objects help us to test the unit under test in isolation. Mock Objects replace collaborators of the unit under test. 软件系统中的绝大多数部件不能独立工作,而需要与其他部件协作,才能完成任务。很多情况下,我们在 进行单元测试的时候,并不担心这些协作者能不能正常工作,因为我们相信它们。但如果我们实在不放心 , 模拟对象可以帮我们独立测试要测试的单元。模拟对象代替了测试单元的协作者。
-English bilingual Documentation EasyMock 2.4 Chinese ChineseEasyMock 2.4 中英文文档
译者:cool8jay
最后更新时间:2008年8月6日 如发现任何翻译错误,请来信告知,以便修正。 E-mail: cool8jay@ Website:
� �
EasyMock 2 Drawbacks - EasyMock 2 的不足

EasyMock 2 does only work with Java 2 Version 5.0 and above. EasyMock 2 只支持Java 2 5.0及以上的版本。
EasyMock by default supports the generation of Mock Objects for interfaces only. For those who would like to generate Mock Objects for classes, there is an extension available at the EasyMock home page. EasyMock 默认只支持为接口生成模拟对象。如果需要为类生成模拟对象,在EasyMock主页上有一个扩 展类可以实现这个功能。
The first Mock Object - 第一个模拟对象
We will now build a test case and toy around with it to understand the functionality of the EasyMock
package. samples.zip contains a modified version of this test. Our first test should check whether the removal of a non-existing document does not lead to a notification of the collaborator. Here is the test without the definition of the Mock Object: 现在,我们建立一个测试用例,围绕它来理解EasyMock 的功能。Samples.zip 中有这个测试用例的修改 版本。我们的第一项测试,验证删除一个不存在的文档时,不会通知协作者。以下是没有定义模拟对象的 测试: package org.easymock.samples; import junit.framework.TestCase; public class ExampleTest extends TestCase { private ClassUnderTest classUnderTest; private Collaborator mock; protected void setUp() { classUnderTest = new ClassUnderTest(); classUnderTest.addListener(mock); } public void testRemoveNonExistingDocument() { // This call should not lead to any notification of the Mock Object: // 这个调用应该不会向模拟对象发送任何通知 classUnderTest.removeDocument("Does not exist"); } } For many tests using EasyMock 2, we only need a static import of methods of org.easymock.EasyMock. This is the only non-internal, non-deprecated class of EasyMock 2. 对于使用EasyMock 2的大部分测试,我们只需要静态引入org.easymock.easymock的所有方法。这是 EasyMock 2中唯一的非内部,非不推荐的类。 import static org.easymock.EasyMock.*; import junit.framework.TestCase; public class ExampleTest extends TestCase { private ClassUnderTest classUnderTest; private Collaborator mock; } To get a Mock Object, we need to 要得到一个模拟对象,我们需要 1. 2. create a Mock Object for the interface we would like to simulate, 创建一个我们要模拟的接口的模拟对象, record the expected behavior, and 纪录预期的行为,
EasyMock 2.4 Readme - EasyMock 2.4自述文件
Documentation for release 2.4 (July 2 2008) 正式发布版2.4的文档(2008 年7月2日) © 2001-2008 OFFIS , Tammo Freese. EasyMock 2 is a library that provides an easy way to use Mock Objects for given interfaces. EasyMock 2 is available under the terms of the MIT license. EasyMock 2是一个通过简单的方法为给定接口生成模拟对象的类库。EasyMock 2基于MIT 许可条款发布。
Mock Objects simulate parts of the behavior of domain code, and are able to check whether they are used as defined. Domain classes can be tested in isolation by simulating their collaborators with Mock Objects. 模拟对象能够模拟领域对象的部分行为,并且能够检验领域对象是否按照定义的那样被使用。通过使用模 拟对象模拟领域类的协作者,可以为领域类营造一个隔离的测试环境。
相关文档
最新文档