easymock是众多mock之中的很容易用的mock,今天刚开始学习,来个简单的教程.以购物车结算为例子,比如首先是每一个商品项的pojo。

 public class Item {  

     private String name;
private int quantity; public Item(String name, int quantity) {
super();
this.name = name;
this.quantity = quantity;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
 public class ShoppingCart {  

     private String name;
private Store store = null; private List<Item> items = new ArrayList(); public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public List<Item> getItems() {
return items;
} public void setItems(List<Item> items) {
this.items = items;
} public void addItem(Item item)
{
items.add(item);
} public void setStore(Store store)
{
this.store=store;
} public Store getStore()
{
return (this.store);
} public Double calculateTotal()
{
Double total = 0.0;
for (Item item : this.items) {
total+= (store.getPrice(item.getName()) * item.getQuantity());
} DecimalFormat decim = new DecimalFormat("0.00");
Double price = Double.parseDouble(decim.format(total)); return price;
}

  在这个购物车的计算中,在计算总价格方面, total+= (store.getPrice(item.getName()) * item.getQuantity());这里,依赖了一个额外的对象store,根据store.getPrice()方法求出某个商品的单价, 但这里模拟的是现在根本不知道这个store 是如何实现的,有可能是第三方的,于是 easymock就派上用长了,它可以根据接口去模拟一个实现出来,下面直接看 
  ShoppingCartTest .java

 public ShoppingCart cart = null;
public Store storeMock = null; @Before
public void initialize()
{
cart = new ShoppingCart();
storeMock = EasyMock.createMock(Store.class);
cart.setStore(storeMock);
} @Test
public void testShoppingCart()
{ EasyMock.expect(storeMock.getPrice("Mead Spiral Bound Notebook, College Rule")).andReturn(5.99);
EasyMock.expect(storeMock.getPrice("Kindle Fire HD 8.9")).andReturn(499.99); //开始使用mock
EasyMock.replay(storeMock); Item item1 = new Item("Mead Spiral Bound Notebook, College Rule", 3);
Item item2 = new Item("Kindle Fire HD 8.9",1); cart.addItem(item1);
cart.addItem(item2); double total = cart.calculateTotal(); System.out.println("Total price of items in shopping cart: $"+total);
assertEquals("Result",505.96, total,0);
} @After
public void cleanup()
{
cart=null;
storeMock=null;
}

  junit一样,在before中,

 @Before
public void initialize()
{
cart = new ShoppingCart();
storeMock = EasyMock.createMock(Store.class);
cart.setStore(storeMock);
}    

  storeMock = EasyMock.createMock(Store.class);就可以模拟一个实现出来了, 
    然后 
  EasyMock.expect(storeMock.getPrice("Mead Spiral Bound Notebook, College Rule")).andReturn(5.99); 这里,使用easymock的断言机制,断言出这个属的单价是5.99,然后记得使用 .EasyMock.replay(storeMock);就可以在真正的测试中,使用store这个对象了;最后记得cleanup中清理下.

easymock快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. echarts文档对照

    echarts的各种配置项可以对照这个文档: https://echarts.baidu.com/echarts2/doc/option.html#title~tooltip.axisPointer. ...

  2. GIT 使用cherry-pick 重演其他分支的提交

    在使用Git时是否会遇到这样的问题: 你正在使用Git进行版本控制,某天你接着昨天的工作了提交了N个提交,结果在合并远程分支的时候才发现原来你在工作之前没有注意到你要提交的分支状态 结果导致你本来要提 ...

  3. Linux echo 显示内容颜色

    Linux echo 显示内容颜色 https://www.cnblogs.com/kimbo/p/6816566.html #字体颜色:30m-37m 黑.红.绿.黄.蓝.紫.青.白 str=&qu ...

  4. Esxi 6.0虚拟机迁移Linux遇到网络配置错误

    在使用vmware迁移linux系统过程中(迁移方式是导出OVF模板和部署OVF模板),发现部署后的linux系统无法启动网卡 报错为 Bringing up interface eth0: Devi ...

  5. Android Studio打开出现:Default activity not found

    昨天项目可以正常打开,没有问题,今天打开的时候就出现了这个问题.可以编译,但是无法生成APK调试.当然,如果选择 Do not launch Activity就可以成功编译.出现这个 Default ...

  6. Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage

    typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...

  7. ios Url Encode

    //ios Url Encode //有时候在请求的参数里里特殊符号比如“+”等.而如果没有encode的话那么传过去的还是” ”,面实际上是%2B. -(NSString*)UrlValueEnco ...

  8. 简单实用的extend对象合并

    /** * 合并对象 * 示例:o = extend({ a: 'a' }, o); */ function extend(s, t) { if (!s) { return {}; } if (!s) ...

  9. 【树莓派】树莓派新版系统SSH连接被拒绝问题处理

    安装好新的版本树莓派(NOOBS_v2_4_0.zip)之后,直连显示器并接上网线,可以看到已经获取到动态IP地址了. 但是,此时使用xshell远程连接时,却一直连接不成功: [d:\~]$ Con ...

  10. EventSource 对象用于接收服务器发送事件通知,是网页自动获取来自服务器的更新

    //--------------------------------客户端代码----------------------------- if(typeof(EventSource) !== &quo ...