快速业务通道

JUnit 4.4新特性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
发人员需要跳过这些导致测试用例函数不通过的异常情况。

清单 6 假设机制优点 1 举例

//@Test 注释表明接下来的函数是 JUnit4 及其以后版本的测试用例函数 @Test public void testAssumptions() {    //假设进入testAssumptions时,变量i的值为10,如果该假设不满足,程序不会执行assumeThat后面的语句    assumeThat( i, is(10) );    //如果之前的假设成立,会打印"assumption is true!"到控制台,否则直接调出,执行下一个测试用例函数    System.out.println( "assumption is true!" ); }

优点 2:利用假设可以控制某个测试用例的运行时间,让其在自己期望的时候运行(run at a given time)。

清单 7 假设机制优点 2 举例

@Test //测试用例函数veryLongTest()执行需要很长时间,所以开发人员不是每次都想运行它,可以通过判断是否定义了 //”DEV”环境变量来选择性地执行该测试用例 public void veryLongTest() throws Exception {    //假设环境变量”DEV”为空,即如果之前通过System.setProperty定义过”DEV”环境变量(不为空),则自动跳过    //veryLongTest中假设后剩下的语句,去执行下一个JUnit测试用例,否则执行假设后接下来的语句    assumeThat( System.getProperty( "DEV" ), nullValue() );    System.out.println("running a long test");    Thread.sleep( 90 * 1000 ); }

如何使用 Assumption 假设机制

开发人员可以使用 assumeThat 并配合 hamcrest 的匹配符 Matcher,对即将被传入到单元测试用例函数中的 runtime 变量值做精确的假设,如果假设不正确(即当前 runtime 变量的取值不满足所假设的条件),则不会将该变量传给该测试用例中假设后面的语句,即程序会从该 assumeThat 所在的 @Test 测试函数中直接自动跳出(test automatically quietly passes,values that violate assumptions are quietly ignored),去执行下一个 @Test 函数,使得本来会中断的测试现在不会中断。

使用假设机制必须得注意以下几点:

由于 JUnit 4.4 引用了 Hamcrest 匹配符库,所以使用 assumeThat 就可以编写所有的假设语句。但是为了方便使用,JUnit 4.4 除 assumeThat 之外,还提供了 assumeTrue,assumeNotNull 和 assumeNoException 语句。

要使用 assume* 假设语句,必须得 import static org.junit.Assume.*;。

如果引用了第三方 hamcrest 的匹配符库,必须得 import static org.hamcrest.Matchers.*;,如果引用 JUnit 4.4 自带的匹配符库,需要 import static org.hamcrest.CoreMatchers.*;。

清单 8 假设机制使用举例

例1: @Test public void filenameIncludesString() {    //如果文件分隔符不是’/’(forward slash),则不执行assertThat断言测试,直接跳过该测试用例函数    assumeThat(File.separatorChar, is(''/''));    //判断文件名fileName是否含有字符串"developerWorks"    assertThat( fileName, containsString( "developerWorks" ) ); } 例2: @Test public void filenameIncludesString() {    //bugFixed不是JUnit4.4的函数,是开发人员自己工程中定义的函数,表示判断指定的defect是否    //被修正了,如果被修正,则返回true,否则返回false。这里假设缺陷13356被修正后才进行余下单元测试    assumeTrue( bugFixed("13356") );    //判断文件名fileName是否含有字符串"developerWorks"    assertThat( fileName, containsString( "developerWorks" ) ); }

JUnit 4.4新特性(5)

时间:2011-01-03 丁钦浩

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号