java参数化测试除法_Junit参数化测试方法(二)

本文主要引用:http://www.ibm.com/developerworks/cn/java/j-lo-feed4junit/index.html#icomments(同http://www.doc88.com/p-730456017079.html)

在上文中阐述的参数化测试方法没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不便。Feed4JUnit 是开源的基于 JUnit 的扩展,通过使用 Feed4JUnit 提供的注释,用户可以很方便的把测试数据存放在文件或其它数据源。本文通过介绍及简单示例,使读者了解并能够使用 Feed4JUnit, 方便的实现数据与代码分离的测试。

一、Feed4JUnit 与 JUnit

经常,在应用程序的业务逻辑中存在大量的这样的接口:他们接受不同的输入,然后进行或验证,或处理,进而完成相同的流程。比如网站的登录入口,用户名和密码都有长度的限制,同时也具有是否允许特殊字符的限制等,所以在我们进行其单元测试的过程中,根据不同长度的用户名和密码,以及不同的字符组合,只需要提供相同的测试代码结构,就能完成测试,不同的仅仅测试数据与期望值,但是因为每一个测试方法中的输入参数不同,我们必须为每一个输入组编写单独的测试用例,从而产生大量冗余代码,十分不便于维护。

Feed4JUnit 是 JUnit 测试框架的扩展,它通过操作来自于文件以及不同的数据源的测试数据,使您的单元测试变得更容易编写与维护。

二、Feed4JUnit 的下载及安装

2. 解压下载的 zip 包,复制整个 lib 文件夹到您的 Java 项目的根目录,如图 1:

aefa103e5e2a061e6d0e591c1e4a6b6f.png

图 1. 复制 lib 到项目根目录

3. 选定项目,右键选择项目的属性,然后通过 Add JARs 将步骤 2 中 lib 文件夹下的所有 Jar 添加到项目的 Build Path 下,如图 2

9fdc788c0df97650c8f1886565cc6fcf.png

图 2. 添加 Jar 到 Build Path

通过以上三步,您已经准备好您的 Feed4JUnit 环境并可以开始使用它,当然,开发测试代码之前,您必需要将 Feed4JUnit 相应的包 Import 进您的类。

三、使用 Feed4JUnit 实现数据与代码分离的测试

Feed4JUnit 的数据源可以包括以下几种类型 - 文件 (CSV 或者 Excel )、数据库、自定义数据源。本文根据实际项目需求以excel文件为例。

Feed4JUnit 使用一个特殊的运行类 Feeder.class,用来支持与标识参数化测试,如果您想要编写数据与代码分离的测试脚本,必须在您的测试类上增加注释

@RunWith(Feeder.class) 。同时,您需要使用 @Test 来标示您实现测试的方法,并且使用 @Source 来声明和接收数据源的数据,基本的代码结构如下所示:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagesample.test;2

3 import staticorg.junit.Assert.assertEquals;4 importorg.databene.feed4junit.Feeder;5 importorg.databene.benerator.anno.Source;6 importorg.junit.Test;7 importorg.junit.runner.RunWith;8

9 /*

10 * Feed4JUnit - @RunWith, @Test and @Source11 */

12 @RunWith(Feeder.class) //Specify the class will be ran as Feeder class

13 public classFeed4JSample {14

15 @Test //Specify the method as a test method

16 @Source()//Specify the input data source

17 public voidtestAccessCheck() {18 assertEquals(true, true);19 }20 }

View Code

四、以文件作为数据源

Feed4JUnit 支持从 CSV 或者 Excel 文件里面读取数据作为输入,这里我们以 Excel 文件为例。

1. 在测试项目的根目录下创建 testData.xlsx 数据文件,样例数据如图 3,默认情况下,第一行会以列名存在,在运行过程中不会作为数据读取。

67ff0ffbdafdc383460206b8fd8bf163.png

图 3. Excel 数据源

2. 创建测试类并在接收数据的测试方法上声明数据源为 @Source("testData.xlsx"),Excel 中的数据在传递过程中会自动按照列与测试方法的参数的位置顺序进行匹配,并以行作为一个单位读取并传递给测试方法体。比如图 3 中的 productsn 列的值会做为方法的第一个参数传入方法体中,expectresultInfo 列的值会作为方法的第二个参数,以此类推。在测试进行过程中,首先在 Excel 文件中读取一行(包含两列),接着按照位置顺序将数据传递到方法体中(每列按顺序对应一个参数)进行执行,执行完成后读取 Excel 中的下一行进行相同流程的测试,其原理与 Java 中的迭代器十分类似。请注意当数据文件中数据的列数小于测试方法参数的个数的时候,测试会因为位置不匹配而失败。如下示例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packageJunitTestSample001;2

3 importorg.databene.benerator.anno.Source;4 importorg.databene.feed4junit.Feeder;5 importorg.junit.Assert;6 importorg.junit.Test;7 importorg.junit.runner.RunWith;8

9 importtestsample001.check;10

11 @RunWith(Feeder.class)12 public classJunitTest003 {13

14 @Test15 @Source("testData.xlsx")16 public voidtest(String productNO, String resultInfo) {17 System.out.println("-------------");18 //User user2 = userService.findByName(usernameParam);

19 check connor = newcheck();20 String actresultInfo =connor.ConnectOracle(productNO);21 System.out.println(actresultInfo);22 Assert.assertEquals(resultInfo, actresultInfo);23 //fail("Not yet implemented");

24 }25

26 }

View Code

3. 运行测试,因为 Feed4Junit 是 JUnit 的扩展,所以运行方式与 JUnit 完全相同,即以 JUnit 运行即可,运行结果如图 4 所示,我们可以看到,testData.xlsx 中的数据已全部传入测试方法并运行。运行结果如下图所示:

d2aa9279c681876d6a1946f5c01176e9.png

图 4. 运行结果示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值