快速业务通道

JUnit 4.4新特性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
时间:2011-01-03 丁钦浩

但是此时您可能又会发现这两个测试用例还是很有限,您所希望的是测试所有的整数,而不只是 2,3 和 5,这些只是您所想要的测试的数据的子集,两个测试用例并不能完全与您所想要测试的代码的行为相等价,您需要更多的测试用例,此时就会发现需要很多的额外工作来编写这些测试用例,更可怕的是,您会发现您需要测试用例的并不只是简单的几个,可能是成千上万个甚至无穷个测试用例才能满足等价您的代码行为的目的。

很自然的,您会想到用清单 11 所示的代码来表达您的测试思想。

清单 11 使用变量辅助编写测试用例

//利用变量来代替具体数据表达测试思想 public void multiplyAnyAmountByInteger(int amount, int multiplier) {    assertEquals( amount * multiplier,      new Pound( amount ).times( multiplier ).getAmount() ); }

利用清单 11 的 multiplyAnyAmountByInteger 方法,可以轻松将测试用例改写成如清单 12 所示:

清单 12 改写的英镑 Pound 乘法的测试用例

@Test public void multiplyPoundsByInteger () {    multiplyAnyAmountByInteger(5, 2);    multiplyAnyAmountByInteger(5, 3); }

如清单 12 所示,以后若想增加测试用例,只要不停调用 multiplyAnyAmountByInteger 方法并赋予参数值即可。

方法 multiplyAnyAmountByInteger 就是一个理论的简单例子,理论就是一个带有参数的方法,其行为就是对任何参数都是正常的返回,不会抛出断言错误和其它异常。理论就是对一组数据进行概括性的陈述,就像一个科学理论一样,如果没有对所有可能出现的情况都进行实验,是不能证明该理论是正确的,但是只要有一种错误情况出现,该理论就不成立。相反地,一个测试就是对一个单独数据的单独陈述,就像是一个科学理论的实验一样。

JUnit 4.4新特性(7)

时间:2011-01-03 丁钦浩

如何使用理论机制

在 JUnit 4.4 的理论机制中,每个测试方法不再是由注释 @Test 指定的无参测试函数,而是由注释 @Theory 指定的带参数的测试函数,这些参数来自一个数据集(data sets),数据集通过注释 @DataPoint 指定。

JUnit 4.4 会自动将数据集中定义的数据类型和理论测试方法定义的参数类型进行比较,如果类型相同,会将数据集中的数据通过参数一一传入到测试方法中。数据集中的每一个数据都会被传入到每个相同类型的参数中。这时有人会问了,如果参数有多个,而且类型都和数据集中定义的数据相同,怎么办?答案是,JUnit 4.4 会将这些数据集中的数据进行一一配对组合(所有的组合情况都会被考虑到),然后将这些数据组合统统通过参数,一一传入到理论的测试方法中,但是用户可以通过假设机制(assumption)在断言函数(assertion)执行这些参数之前,对这些通过参数传进来的数据集中的数据进行限制和过滤,达到有目的地部分地将自己想要的参数传给断言函数(assertion)来测试。只有满足所有假设的数据才会执行接下来的测试用例,任何一个假设不满足的数据,都会自动跳过该理论测试函数(假设 assumption 不满足的数据会被忽略,不再执行接下来的断言测试),如果所有的假设都满足,测试用例断言函数不通过才代表着该理论测试不通过。

清单 13 理论机制举例

import static org.hamcrest.Matchers.*; //指定接下来要使用的Matcher匹配符 import static org.junit.Assume.*; //指定需要使用假设assume*来辅助理论Theory import static org.junit.Assert.*; //指定需要使用断言assert*来判断测试是否通过 import org.junit.experimental.theories.DataPoint;  //需要使用注释@DataPoint来指定数据集 import org.junit.experimental.theories.Theories; //接下来@RunWith要

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号