Fastpoint
级别: 总版主
精华:
44
发帖: 5033
基地声望: 390 点
基地币: 1662 Bug
基地贡献: 0 点
好评度: 15 点
在线时间:818(小时)
注册时间:2005-10-08
最后登录:2008-07-22
|
[Study JUnit] 跟我一步一步学JUnit 5
构建类测试包含着两层意思,第一层代表构建类测试的环境,另一层代表构建类测试驱动以支持自动化日测试,更具体的行为包括:
1. 将所有测试代码保存在单一的地点,让所有测试人员都能从这里获取最新的源代码(以及以前的版本)。 2. 使创建测试驱动简单化,一个良好的测试驱动不会和太多的业务代码耦合。 3. 使测试执行完全自动化,让任何人都可以只输入简单的命令就运行全部的测试。 4. 确保所有人员都可以得到最新、最好的可执行驱动文件。
为了实现日测试,任何测试人员都需要能够很容易地获取全部最新的测试代码,如果要做一次日测试必须跑遍整个项目组,依次询问实现人员有没有更新的测试代码,然后把这些新代码收集起来,再经过复查和二次组装……没有什么比这更糟糕的了。所以类测试环境构建的前提是必须引入配置管理(代码控制),这些配置管理系统通常都具备网络功能,可以让测试人员和实现人员轻松获取最新的测试代码,而且这些配置工具还提供版本管理,这样可以很轻松地得到测试代码在不同的时间、不同的发布基线的各个版本。 所有的测试代码都应该保存在配置管理系统中,包括驱动脚本(TestCase)、测试数据(TestData)、包脚本(TestSuite)等,避免出现驱动脚本得到了控制,但其他一些重要的辅助程序丢失或者残缺不全的现象。
在配置管理系统的同一棵项目源树中,建议类测试代码和业务代码根据不同包管理原则分开,但需形成依次对应的关系,现在NetBeans就自动支持这个功能,不错,哈哈。
现在我们回来看看类CRC的实现:
原CRC定义为循环冗余码校验,英文名称为Cyclical Redundancy Check。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
其实在上面的两个例子类中,最好能被CRC的是ShoppingCart ,Product 是个实物类不牵涉特殊的方法和构造,所以我们这里针对ShoppingCart 做CRC检查,看看它的哪部分被测试最有价值。
addItem()属于主体业务方法测试跑不了,removeItem()同样属于主体业务方法,getItemCount()和empty()同样属于潜在业务方法价值不如主体业务方法高,ProductNotFoundException属于异常测试,看个人感觉了,我觉得这样的类价值是最高的。getBalance() 方法特殊点个人认为可以跟addItem()主体业务方法一起测试,所以按照类测试价值如下排列:
NO.1 ProductNotFoundException NO.2 addItem()、removeItem() NO.3 getItemCount()、empty() NO.4 getBalance()
这样测试代码可以这么写:
public class ShoppingCartTest extends TestCase { private ShoppingCart cart; private Product book1; protected void setUp() { cart = new ShoppingCart();//创建购物车实例 book1 = new Product("Pragmatic Unit Testing", 29.95);//创建物品实例01 cart.addItem(book1); } public void testEmpty() {//清除购物车 cart.empty(); assertEquals(0, cart.getItemCount()); }
public void testAddItem() {//测试购物车增加物品 Product book2 = new Product("Pragmatic Project Automation", 29.95); cart.addItem(book2);//创建物品实例02
assertEquals(2, cart.getItemCount()); double expectedBalance = book1.getPrice() + book2.getPrice(); assertEquals(expectedBalance, cart.getBalance(), 0.0);//顺带测试物品总数量 } public void testRemoveItem() throws ProductNotFoundException {//测试购物车移出物品 cart.removeItem(book1);
assertEquals(0, cart.getItemCount()); }
public void testRemoveItemNotInCart() {//测试异常 try { Product book3 = new Product("Pragmatic Version Control", 29.95); cart.removeItem(book3); fail("Should raise a ProductNotFoundException"); } catch(ProductNotFoundException expected) { // successful test } } }
该测试类执行结果如下:
.... Time: 0.01
OK (4 tests)
整个测试类测试完成了。
[ 此贴被Fastpoint在2005-10-25 17:21重新编辑 ]
|
可不可不要这么样徘徊在目光内 你会察觉到我根本寂寞难耐 即使千多百个深夜曾在梦境内 我有吻过你这毕竟并没存在
人声车声开始消和逝 无声挣扎有个情感奴隶 是我多么的想她 但我偏偏只得无尽叹谓
其实每次见你我也着迷 无奈你我各有角色范围 就算在寂寞梦内超出好友关系 唯在暗里爱你暗里着迷 无谓要你惹上各种问题 共我道别吧别让空虚使我越轨
|
|
[楼 主]
|
Posted: 2005-10-24 21:09 |
| |