为Java应用程序编写数据驱动的测试

JUnit是一个功能非常强大的测试框架,它不仅为其用户提供了编写快速简便的测试的功能,而且还为用户提供了扩展它并使其按其期望的方式工作的机会。 在JUnit之上构建了许多框架,这些框架为目标受众提供了各种易用的功能。

EasyTest是这样一种框架,其主要重点是将数据驱动测试功能引入JUnit世界。

JUnit已经有了某种机制,可以为用户提供某种数据驱动的测试感觉。 但是它还不够,也不干净。 例如,用户可以使用@Parameterized Runner编写数据驱动测试,但使用Parameterized Runner会导致编写许多不必要的代码。

EasyTest试图通过弥合JUnit已经拥有的与用户最方便的之间的差距来解决这些问题。

在今天的帖子中,我将简要介绍一下EasyTest是什么以及它如何从一种业余爱好演变为一个成熟的项目,该项目已被许多公司和许多人使用。

入门

为了开始使用EasyTest,您要做的就是下载JAR文件。 您可以通过Maven做到这一点。 这是 Maven上最新的easytest-core JAR 的链接 。

下载JAR文件后,就可以编写第一个数据驱动测试了。 这是使用EasyTest Core Module快速启动和运行的分步指南。

步骤1 :您的pom文件中具有最新的EasyTest依赖项:

<dependency>
<groupId>org.easetech</groupId>
<artifactId>easytest-core</artifactId>
<version>1.3.2</version>
</dependency>

步骤2 :使用测试方法创建一个简单的测试类

@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })public class TestExcelDataLoader{private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}

EasyTest库提供了许多选项,可用于有效执行测试。 例如,如果您要并行执行测试,则EasyTest提供并行注释。 查看此博客文章,以详细了解并行注释 。

这是另一个利用EasyTest中可用功能的详细示例:

@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })@Format(date='dd/MM/yyyy')@Report@Parallel(threads=5)public class TestExcelDataLoader{@Duration(timeInMillis=1000)private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}

您可以查看源代码的javadocs,以了解每种注释的含义,还可以了解EasyTest中可用的功能。

在每个测试类上编写带有如此多注释的测试类不仅耗时(典型的样板代码),而且还会引入难以跟踪的错误。 因此,Easytest为您提供了一次定义和随处使用功能的能力。 看下面的示例,与上面的示例相同,但更简洁:

另外,您可以在类级别使用TestPolicy批注将所有批注移动到单独的可重用测试策略类。 这是一个例子。

@RunWith(DataDrivenTestRunner.class)@TestPolicy(TestExcelDataPolicy.class)public class TestExcelDataLoader{@Duration(timeInMillis=1000)private ItemService itemService = new RealItemService();@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}

在这里,我们没有定义测试类的几个注释,而是定义了一个TestPolicy Annotation ,它从测试类中抽象出了复杂的定义。

这是Policy类TestExcelDataPolicy样子:

@DataLoader(filePaths = { "org/example/data/testExcelData.xls" })@Format(date='dd/MM/yyyy')@Report@Parallel(threads=5)public class TestExcelDataPolicy {}

具有这样的抽象意味着现在您可以在多个测试中重用您的测试策略类,从而大大减少了样板代码。

定义测试类后,下一步就是定义测试数据文件。

步骤3 :创建您的测试数据文件(对于上面的示例,这将是一个名为testExcelData.xls的Excel文件)
第一行的第一列表示需要为其提供数据的测试方法的名称。 第一行的第二和第三列代表测试输入参数的名称。 第2和3行代表实际测试数据。

getExcelTestData itemId libraryId11567 91475null         0

恭喜你 您刚刚编写了第一个数据驱动测试。 当使用Junit支持的IDE运行上述测试时,EasyTest将生成2个测试,每组数据一个。 这样,您就不必编写用于使用不同参数进行测试的不同测试。

接下来,让我们扩展该示例,并尝试了解EasyTest的一些其他功能

了解EasyTest中的IoC容器支持

除了在测试类本身中定义/初始化testSubject(上述测试中的ItemService)之外,您还可以在配置文件中外部化初始化逻辑并在运行时注入正确的实例。 这样做的好处是,您可以将初始化逻辑与测试逻辑分开,从而使您的测试更简洁,更可维护。 其次,您也可以在其他测试中重用外部化的逻辑。 让我们看看如何为上述测试做到这一点。

@RunWith(DataDrivenTestRunner.class)@DataLoader(filePaths = { "testExcelData.xls" })@TestConfigProvider({TestConfigProviderClass.class})public class TestExcelDataLoader{@Injectprivate ItemService itemService;@Testpublic void getExcelTestData(@Param(name="libraryId")Float libraryId, @Param(name="itemId")Float itemId) {System.out.print("Executing getExcelTestData :");System.out.println("LibraryId is :" + libraryId + " and Item Id is :" + itemId);}

请注意,我们在上述测试中添加了两件事:

  1. TestConfigProvider批注
  2. 注入注解

TestConfigProvider批注采用一组配置提供程序类,从这些类可以加载Bean。 在上面的示例中,TestConfigProviderClass.class将如下所示:

public class TestConfigProviderClass {@TestBean public ItemService itemService(){return new RealItemService();}

还要注意,我们使用标准Javax批注@Inject来注入测试Bean。 EASYTEST支持@Inject按类型,注射@Named沿@Inject按名称注射。 除此之外,EasyTest还支持按字段名称进行注入。 EASYTEST也有自己的@Provided当用户没有或不能使用javax注释的情况下的注释。

到此博客帖子结束了。 希望我能给您有趣的EasyTest及其功能介绍。 如果您有任何疑问或疑问或想为该项目做出贡献,请通过anujkumar@easetech.org与我联系。

翻译自: https://www.javacodegeeks.com/2015/08/writing-data-driven-tests-for-your-java-application.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为《31天成为IT服务达人》征求正式名字

写书时。没细想书的名字&#xff0c;仅仅是在想出本能够让同行或未来同行高速入门的书&#xff0c;如今想来还是应正式给他取个名&#xff0c;请朋友们帮忙哟 转载于:https://www.cnblogs.com/bhlsheji/p/5241848.html

设置按钮5秒后可以点击下一步||5秒后自动关闭网页

场景:业务需要在点击拍摄的时候提示一个用户须知页面,5秒后可以点击下一步。这属于一个js计时器的功能。这里用jQuery实现一下 效果图: html <div style="text-align: center;"><input type="button" value="下一步" id="next…

Codeforces Round #344 (Div. 2) B. Print Check

题意&#xff1a; 给你一个n*m一开始全是0的矩阵&#xff0c;然后又q次询问 每次询问给你三个字母 op,a,b 将第a行变成b 将第a列变成b 然后让你输出Q次询问后&#xff0c;这个矩阵长什么模样 思路&#xff1a;每个格子记录两个状态&#xff0c;区分横竖。 1 #include<cstdio…

linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记

关于 SKB序列号的小笔记为了修改TCP协议&#xff0c;现在遇到了要改动tcp分组的序列号&#xff0c;但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq不清楚在那里初始化了&#xff0c;就跟踪了分配SKB的函数 sk_stream_alloc_skb()还是没有找到&#xff0c;最…

JSP + Struts + Hibernate + Spring+MySQL+Myeclipse实现固定资产管理系统

导读:随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求,利用计算机实现设备及资产的信息化管理已经显得非常重要。固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息,这种管理方式存在着许多缺点,这对…

java高效复制文件并移动_Java 7:复制和移动文件和目录

java高效复制文件并移动这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续&#xff0c;这次涵盖了文件的复制和移动以及完整的目录树。 如果您曾经对Java缺少copy和move方法感到沮丧&#xff0c;那么请继续阅读&#xff0c;以免麻烦。 涵盖范围中包括非常有用的Files.…

MyEclipse+Tomcat+Java+MySQL实现企业员工信息管理系统

导读:随着信息技术的日益发展已深入到社会的各个角落,各个大的企业,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适合自己的管理系统。不管大企业。各种员工信息的小企业也是如此,企业的管理层也深深意识到这一点,以前管理大多为…

T4模板之菜菜鸟篇

一、废话 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎。在 Visual Studio 中&#xff0c;“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板&#xff0c;它可以生成文本文件。 在 Visual C# 或 Visual Basic 中&…

linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...

区块链白皮书代写大家都知道&#xff0c;在WINDOWS系统中有很多动态链接库(以.DLL为后缀文件&#xff0c;DLL即Dynamic Link Library)。这种动态链接库&#xff0c;和静态函数库不同&#xff0c;它里面函数并不是执行程序本身一部分&#xff0c;而是根据执行程序需要按需装入&a…

MyEclipse+JavaEE+jsp+sqlsever实现产品售后服务系统

导读:我国信息产业、企业售后服务发展迅速,电商的发展超出了所有人都想象,与此同时也带来了诸多的问题。飞速发展的交易额,带来了大量的GDP增长,然而光鲜的背后是每天无数客服手忙脚乱的为顾客服务。由于顾客对自身生活质量要求越来越高,售后管理业必须随着人们生活水平的…

使用Apache Cassandra设置一个SpringData项目

在这篇文章中&#xff0c;我们将使用Gradle和spring boot来创建一个将spring-mvc和Apache Cassandra数据库集成在一起的项目。 首先&#xff0c;我们将从Gradle配置开始 group com.gkatzioura version 1.0-SNAPSHOTapply plugin: java apply plugin: eclipse apply plugin: i…

西南大学0039c语言作业答案,2017年6月西南大学继续教育学院C语言0039大作业答案...

1、假定p1和p2是已赋值的字符型指针&#xff0c;则下述有关运算中&#xff0c;非法的是(.*(p1-2p2)getchar( ); )2、循环语句for (x0,y0;(y!123)||(x<4);x)&#xff1b;的循环执行(无限次)3、设有定义"int a5,b,*p&a;"&#xff0c;执行下列语句后,b的值不为5的…

第一周学习进度表

第一周所花时间&#xff08;包括上课&#xff09;上课时间&#xff1a;4小时 周三、周五、周六各3小时阅读<<构建之法>>代码量&#xff08;行&#xff09;45博客量4了解到的知识 在上软件工程这门课使我对编程有了哟个新的认识&#xff0c;就是在编写一个复杂程序时…

前端工程师必须知道的用javaScript刷新当前页面的3种方法

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

Description 给定n(N<100)&#xff0c;编程计算有多少个不同的n轮状病毒。 Input 第一行有1个正整数n。 Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3Sample Output 16HINT Source Solution&#xff1a;推导不会&#xff0c;看不懂&#xff0c;知道了公式f[i…

cla c 语言编译器,第九章 CLA_C2000_C_Compiler.pdf

TI CLA C 编译器概述C2000 Compiler RoadmapCGT v6.2CGT v6.1ProductionCGT v6.0Early AdopterIn DevelopmentCGT v5.2FutureCurrent 11Q4 12Q1 12Q2 12Q3 12Q4 13H1 FutureC2000 CGT v5.2 C2000 CGT v6.1 C2000 CGT v6.2•Assembler support for CLA •CLA C support •Future…

新年将至, 程序员如何以代码送出新春祝福

导读:农历新年将至,祝福的话汇成千言万语都寄托在贺卡之中,也许今年你受到了很多的挫折,又或者是顺顺利利度过了一年。但不管怎么样,不管是哭与笑,人生的年轮都已经转过了一圈。我们唯有继续向前走,不要回头,未来的自己取决于现在的自己。有时候一句不经意的问候,一句…

C语言 删除文件 M,最全的C盘可删除文件清单

一、关闭Win7系统休眠功能“以管理员身份运行&#xff0c;所有程序→附件→命令提示符”&#xff0c;右击选择“以管理员身份运行”&#xff0c;进入命令提示符后&#xff0c;手工输入“powercfg -h off” 关闭Win7系统休眠功能;二、关闭系统保护计算机右键属性--高级管理设置-…

身份证/异地身份证在北京办理的解决办法

今年4月18号身份证就到期啦,赶紧抽个时间去补办一个,这种事情一般只能选在工作日,你工作别人也工作的时间段。这个是初中时期弄得身份证,都10年啦,这次在北京补办一下,老家是安徽的。又逢今年在京过年,我太难了。 需要什么材料? 一般来说需要户口本,居住证,还有快要…

小程序--显示图形效果

//运用for循环嵌套循环知识 class Alhh{ public static void main(String[] args){ for(int i0;i<5;i){//控制行数 for(int j0;j<4-i;j){//用-代替空格 System.out.print("-"); } for(int k0;k<i1;k){//*的个数 System.out.print("* "); } System…