Easymock学习

                               Author:luojie

  1. 1.       Easymock简介

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

用于白盒测试,与预期结果不同,才去分析代码。

  1. 2.       Easymock + junit 单元测试

EasyMock采用记录-----回放的工作模式,基本使用步骤:
*        
创建Mock对象的控制对象Control。
*         
从控制对象中获取所需要的Mock对象。
*         
记录测试方法中所使用到的方法和返回值。
*         
设置Control对象到“回放”模式。
*         
进行测试。
*         
在测试完毕后,确认Mock对象已经执行了刚才定义的所有操作。

public class TalkerController {

public Integer getResponseByWord(String
word){

/*if(word=="我很生气!"){

return EmotionConstants.very_angry_emotion;

}

else if(word == "我有点生气"){

return
EmotionConstants.normal_angry_emotion;

}

else if(word == "我心态平静"){

return
EmotionConstants.normal_emotion;

}

else if(word == "我有点开心"){

return
EmotionConstants.normal_happy_emotion;

}

else if(word == "我很开心"){

return EmotionConstants.very_happy_emotion;

}else{

return 0;

}*/

return 0;

}

easymock测试类初始化代码:

@Before

public void
init(){

calMotion = new CalculateMotion();

talkerMock = EasyMock.createMock(TalkerController.class);

calMotion.setController(talkerMock);}

easymock测试类实现函数getResponseByWord代码:

@Test

public void calTest() throws
Exception{

EasyMock.expect(talkerMock.getResponseByWord("我很生气!

")).andReturn(5);

EasyMock.expect(talkerMock.getResponseByWord("我很开心

")).andReturn(1);

EasyMock.replay(talkerMock);

Human
a = new
Human("我很生气!", 1);

Human
b = new
Human("我很开心", 1);

calMotion.getHumanList().add(a);

calMotion.getHumanList().add(b);

int total = calMotion.calculateAvgMotion();

System.out.println("total motion:"+total);

Assert.assertEquals(6,
total);

}

  1. 3.       easymock +
    spring + junit4

 easymock测试类关键代码如图所示:

Junit4的测试套件:

@RunWith(Suite.class)

// 指定运行器

@Suite.SuiteClasses({
CalculatorTest.class, ParametersTest.class })

// 指定要测试的类

public class TestAll

{

}

   @RunWith(Suite.class)
   @SuiteClasses(TestAll.class)
   // 除了指定类,也可以指定套件类
   public class TestAll2
   {
   
   }
  1. 4.       Junit主要语法

JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation

* @Before:初始化方法   对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所                  有方法执行一次)

* @After:释放资源  对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所

有方法执行一次)

* @Test:测试方法,在这里可以测试期望异常和超时时间

* @Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常

* @Ignore:忽略的测试方法

* @BeforeClass:针对所有测试,只执行一次,且必须为static void

* @AfterClass:针对所有测试,只执行一次,且必须为static void

* 一个JUnit4的单元测试用例执行顺序为:

* @BeforeClass -> @Before -> @Test -> @After -> @AfterClass;

* 每一个测试方法的调用顺序为:

* @Before -> @Test -> @After;

  1. 5.       参考网站:

http://jackyrong.iteye.com/blog/1934670(easymock快速入门教程)

http://blog.csdn.net/vking_wang/article/details/9170979(easymock基本语法)

http://blog.csdn.net/u010218617/article/details/10468441(easymock+spring)

http://blog.csdn.net/zhangxin09/article/details/42487319(junit+mockito)

easymock+junit+spring学习·的更多相关文章

  1. Spring注解配置、Spring aop、整合Junit——Spring学习 day2

    注解配置: 1.为主配置文件引入新的命名空间(约束) preference中引入文件 2.开启使用注解代理配置文件 <?xml version="1.0" encoding= ...

  2. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  3. 我的Spring学习记录(五)

    在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...

  4. spring学习(01)之IOC

    spring学习(01)之IOC IOC:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创 ...

  5. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  6. Spring 学习记录6 BeanFactory(2)

    主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...

  7. spring 学习(五):spring 事务

    spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...

  8. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

  9. spring 学习(三):aop 学习

    spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代 ...

随机推荐

  1. 分支界定法 branch-and-bound 分析与实现)(转载)

    1. 介绍分支界定法之前需要了解一下广度优先搜索breadth-First-search(BFS) 1.从图中某个顶点V0出发,并访问此顶点:以层为顺序,一层一层往下遍历 2.从V0出发,访问V0的各 ...

  2. MVC Razor基础

    @ 可以编写一条C#语句@{} 可以编写一组C#语句@: 将文字内容直接输出到页面上去@() 在一句中将一段C#代码包括起来,证明这一句完整的C#代码 Razor解决路径问题: Html.Action ...

  3. The user specified as a definer ('root'@'%') does not exist

    The user specified as a definer ('root'@'%') does not exist 此种报错主要是针对访问视图文件引起的(没有权限) 解决方法: 2.进入mysql ...

  4. C语言解析Ini格式文件

    引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...

  5. HDMI IP学习笔记

    在HDMI的IP核中点击,生成例子.找到./simulaion/mentor文件夹,把modelsim路径转到该路径下,即可仿真.

  6. SQL Server 通用分页存储过程

    create proc commonPagination ), --要显示的列名,用逗号隔开 ), --要查询的表名 ), --排序的列名 ), --排序的方式,升序为asc,降序为 desc ), ...

  7. install LLVM

    version >= 3.8.0 $ cd llvm... $ mv someofClang ./tools $ mkdir build $ cd build $ cmake -DCMAKE_B ...

  8. ASP.NET ZERO 学习 HangFire的使用

    hangfire 是一个分布式后台执行服务. 官网:http://hangfire.io/ 1.启用 hangfire 2.Hangfire可以提供一个面板页面,实时显示所有后台作业的状态,你可以按它 ...

  9. myeclipse部署web项目到server : deploy location 为 INVALID,并且不能更改

    首先查看项目路径下有没有 .mymetadata文件,没有就从其它地方挪一个,但是文件中的id必须是唯一的. 如果还不行就去下面这位大哥写的博客看下,进行下一步就可以解决了 生如夏花

  10. flash中htmlText样式

    赋值htmlText时,htmlText中指定了样式的按指定样式显示,没有指定的按该文本的默认样式显示. PS:flash软件拖出来的文本,在赋值htmlText的时候该文本原有样式会失效,而new出 ...