» 您尚未 登录   注册 | 社区服务 | FTP中心 | 帮助 | 社区 | 无图版 | 测试百科  | 测试Blog 
软件测试基地论坛 -> 测试开发技术 -> [Study JUnit] 跟我一步一步学JUnit 4
 XML   RSS 2.0   WAP 

--> 本页主题: [Study JUnit] 跟我一步一步学JUnit 4 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
Fastpoint


该用户目前不在线
级别: 总版主
精华: 44
发帖: 5033
基地声望: 390 点
基地币: 1687 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

[Study JUnit] 跟我一步一步学JUnit 4

FastPoint [链接]




这次我找了一个购物车的例子做最常规的JUnit测试开发案例,这里非常感谢Mike Clark的购物车代码,大家可以通过http://clarkware.com跟他联系。

源代码分析:

一、兵马未动,粮草先行

public class ProductNotFoundException extends Exception {
  public ProductNotFoundException() {
    super();
  }
}

实际上在整个框架构建之前,首先要把框架Exception(异常)类定义好,模拟现实意外动作展示。这个类继承了Java SDK原包的Exception类,构造方法也继承了父构造方法,简单无须多说。


[ 此贴被Fastpoint在2005-10-24 13:10重新编辑 ]


可不可不要这么样徘徊在目光内
你会察觉到我根本寂寞难耐
即使千多百个深夜曾在梦境内
我有吻过你这毕竟并没存在

人声车声开始消和逝
无声挣扎有个情感奴隶
是我多么的想她
但我偏偏只得无尽叹谓

其实每次见你我也着迷
无奈你我各有角色范围
就算在寂寞梦内超出好友关系
唯在暗里爱你暗里着迷
无谓要你惹上各种问题
共我道别吧别让空虚使我越轨
[楼 主] | Posted: 2005-10-24 12:49 顶端
Fastpoint


该用户目前不在线
级别: 总版主
精华: 44
发帖: 5033
基地声望: 390 点
基地币: 1687 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



二、实归抽象1

public class Product {

  private String title;
  private double price;
 
  public Product(String title, double price) {
    this.title = title;
    this.price = price;
  }
 
  public String getTitle() {
    return title;
  }
 
  public double getPrice() {
    return price;
  }
 
  public boolean equals(Object o) {
    if (o instanceof Product) {
      Product p = (Product)o;
      return p.getTitle().equals(title);
    }
   
    return false;
  }
}

这个Product 类就是对现实售卖物品的一种抽象化表现,很简单的属性title(物品名称)和price(物品价格),该类构造方法提供了这两个参数输入,如果你想实例化这个类就要输入它们。按照Java标准类书写方法,这个类分别提供了获取物品名称方法(getTitle实例方法)和获取物品价格方法(getPrice实例方法),最后的equals实例方法覆盖了父类的同名方法,本类实例和其他Product实例比对的时候,检查两个Product实例的title属性是否一致,如果不是则返回一个Fasle。这样看来,该类的title属性多少有点像数据库的主键,唯一标示物品。至于价格的设计则符合了现实,同样的物品就算名字相同,可能价格也不一样。

如果你想使用这个类可以这么写:

public static void main(String[] args){
Product book = new Product(“软件测试”,new Double(25.00));
Product apple = new Product(“苹果”,new Double(5.10));
... ...
}



[ 此贴被Fastpoint在2005-10-24 13:17重新编辑 ]


可不可不要这么样徘徊在目光内
你会察觉到我根本寂寞难耐
即使千多百个深夜曾在梦境内
我有吻过你这毕竟并没存在

人声车声开始消和逝
无声挣扎有个情感奴隶
是我多么的想她
但我偏偏只得无尽叹谓

其实每次见你我也着迷
无奈你我各有角色范围
就算在寂寞梦内超出好友关系
唯在暗里爱你暗里着迷
无谓要你惹上各种问题
共我道别吧别让空虚使我越轨
[1 楼] | Posted: 2005-10-24 13:06 顶端
Fastpoint


该用户目前不在线
级别: 总版主
精华: 44
发帖: 5033
基地声望: 390 点
基地币: 1687 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



三、实归抽象2

public class ShoppingCart {
 
  private ArrayList items;
 
  public ShoppingCart() {
    items = new ArrayList();
  }
 
  public double getBalance() {
    double balance = 0.00;
    for (Iterator i = items.iterator(); i.hasNext();) {
      Product item = (Product)i.next();
      balance += item.getPrice();
    }
   
    return balance;
  }
   
  public void addItem(Product item) {
    items.add(item);
  }
 
  public void removeItem(Product item) throws ProductNotFoundException {
    if (!items.remove(item)) {
      throw new ProductNotFoundException();
    }
  }
 
  public int getItemCount() {
    return items.size();
  }
   
  public void empty() {
    items.clear();
  }  
}


其实购物车肯定有一个篮子的问题,谁也不会买个东西就跑到收银台付一次钱,大家都是推着满载的购物车一起付账的,所以这里用了Java SDK提供的集合类ArrayList。

ShoppingCart 的构造方法就是初始化一个ArrayList集合类,当你实例化它的时候篮子问题就解决了。getBalance() 实例方法用来获取整个购物车篮里所有物品的总价,初始为“0.00”元。addItem()实例方法增加物品到篮子里,removeItem()实例方法清除你不要的已选物品,当被清除的物品不存在的时候,它会抛出我们第一节构造的异常“哎呀,东西没了!”。getItemCount()实例方法取得整个购物车篮里所有物品的总数,empty()实例方法慎用,彻底清除整个篮子里物品,换句话说“白忙活了”。

如果你想使用这个类可以这么写:

public static void main(String[] args){
ShoppingCart myshopcart = new ShoppingCart();

myshopcart.addItem(new Product(“软件测试”,new Double(25.00)));
myshopcart.addItem(new Product(“苹果”,new Double(5.10)));
... ...
}



[ 此贴被Fastpoint在2005-10-24 13:32重新编辑 ]


可不可不要这么样徘徊在目光内
你会察觉到我根本寂寞难耐
即使千多百个深夜曾在梦境内
我有吻过你这毕竟并没存在

人声车声开始消和逝
无声挣扎有个情感奴隶
是我多么的想她
但我偏偏只得无尽叹谓

其实每次见你我也着迷
无奈你我各有角色范围
就算在寂寞梦内超出好友关系
唯在暗里爱你暗里着迷
无谓要你惹上各种问题
共我道别吧别让空虚使我越轨
[2 楼] | Posted: 2005-10-24 13:12 顶端
Fastpoint


该用户目前不在线
级别: 总版主
精华: 44
发帖: 5033
基地声望: 390 点
基地币: 1687 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



四、抽象归于平寂

实际上用Junit做测试也有规范的测试用例,我们统称类CRC检查卡,后面我们就根据CRC的思路去分析上面的购物车如何做测试。


[ 此贴被Fastpoint在2005-10-25 17:20重新编辑 ]



附件: Shopping cart.rar (3 K) 下载次数:42

可不可不要这么样徘徊在目光内
你会察觉到我根本寂寞难耐
即使千多百个深夜曾在梦境内
我有吻过你这毕竟并没存在

人声车声开始消和逝
无声挣扎有个情感奴隶
是我多么的想她
但我偏偏只得无尽叹谓

其实每次见你我也着迷
无奈你我各有角色范围
就算在寂寞梦内超出好友关系
唯在暗里爱你暗里着迷
无谓要你惹上各种问题
共我道别吧别让空虚使我越轨
[3 楼] | Posted: 2005-10-24 13:32 顶端
joyce


该用户目前不在线
级别: 助理测试工程师
精华: 2
发帖: 666
基地声望: 155 点
基地币: 7552 Bug
基地贡献: 0 点
好评度: 0 点
在线时间:540(小时)
注册时间:2005-10-06
最后登录:2008-07-16
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子





sunny_w_b@hotmail.com
[4 楼] | Posted: 2006-04-17 11:30 顶端
luciferseye


该用户目前不在线
级别: Cntesting老学员
精华: 0
发帖: 93
基地声望: 20 点
基地币: 57 Bug
基地贡献: 1 点
好评度: 0 点
在线时间:74(小时)
注册时间:2005-11-12
最后登录:2007-06-13
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



怎么早没看到乜~看来论坛里藏了不少好东西~要经常地反复地深入地淘~

看这小胡子多赞啊~
^_^
@_@
[5 楼] | Posted: 2006-07-28 13:48 顶端
baobaoliang


该用户目前不在线
级别: 测试新手
精华: 0
发帖: 12
基地声望: 1 点
基地币: 6435 Bug
基地贡献: 0 点
好评度: 0 点
在线时间:0(小时)
注册时间:2006-07-05
最后登录:2006-07-28
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



经典!!!

开心就好!!!!
[6 楼] | Posted: 2006-07-28 16:48 顶端
mtzvs


该用户目前不在线
级别: Cntesting老学员
精华: 1
发帖: 893
基地声望: 138 点
基地币: 0 Bug
基地贡献: 5 点
好评度: 5 点
在线时间:285(小时)
注册时间:2006-03-27
最后登录:2008-03-07
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



不错~~
[7 楼] | Posted: 2006-07-28 20:30 顶端
aifengyun


该用户目前不在线
级别: Cntesting老学员
精华: 0
发帖: 92
基地声望: 25 点
基地币: 1 Bug
基地贡献: 0 点
好评度: 0 点
在线时间:29(小时)
注册时间:2006-04-10
最后登录:2008-11-06
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



刚学完Junit 感觉整个思路很清晰,测过老师的购物车了。

坚韧,平和
[8 楼] | Posted: 2006-07-29 15:04 顶端

软件测试基地论坛 -> 测试开发技术




软件测试基地上海测仕信息技术有限公司旗下网站
Copyright © 2005-2007 Cntesting.com, All Rights Reserved
沪ICP备06057721号

Powered by PHPWind Code © 2003-06 PHPWind
Total 0.232342(s) query 5, Time now is:12-04 14:31, Gzip disabled
You can contact us


每日一句:Loading...