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

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提供一个Parallel注释。 请查看此博客文章,以详细了解并行注释 。

这是另一个利用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

java编写应用程序

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

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

相关文章

C语言如何知自身函数的实际地址与大小

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删事情的起因大概是这样……在很久很久以前&#xff0c;我最早用的是MASM&#xff08;Win32ASM&#xff09;写程序&#xff0c;从平台兼容性、开发…

python快速排序算法循环_算法:快速排序的Python实现

一、概述快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition element&#xff0c;有时又称为pivot)&#xff1b;接着重排列表将其 划分 为三个部分&#xff1a;left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分)&a…

xtext_使用Xtext为Eclipse和IntelliJ开发DSL

xtext在这篇文章中&#xff0c;我们将看到如何开发一种简单的语言。 我们的目标是&#xff1a; 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示&#xff0c;验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 &#xff0c;但请包含您的兴奋之处&…

sed 插入多行_Linux三剑客之sed

sed命令用法小记版本&#xff1a;CentOS7▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼好久没更新文章了&#xff0c;项目的事情太多&#xff0c;总得给自己的懒惰找个借口&#xff0c;哈哈~话不多说进入正题创建测试数据[aliscaspark02 a]$ cat data#test the sedThis is the header l…

分享一些超级炫酷的C语言小技巧

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C语言常常让人觉得它所能表达的东西非常有限。它不具有类似第一级函数和模式匹配这样的高级功能。但是C非常简单&#xff0c;并且仍然有一些非常…

使用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: idea appl…

优朋普乐大数据_优朋普乐邵以丁:用大数据全面洞察需求

优朋普乐创始人、董事长兼CEO邵以丁回顾优朋普乐十二年发展历程&#xff0c;数次强调是多年来积累的大数据给优朋普乐的业务拓展指明了方向&#xff0c;有的放矢的决策让企业对未来发展充满信心。大数据为及时发现甚至准确预测消费需求提供了新途径&#xff0c;因为基于相关的大…

C++编程新手容易犯的 10 种编程错误

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删公司每年都会有一定的人员流动&#xff0c;相应地也会招一些应届生补充进来&#xff0c;指导应届生已经成为老员工的必修课了。平日里会我们会经…

drill apache_Apache Drill:如何创建新功能?

drill apacheApache Drill允许用户使用ANSI SQL探索任何类型的数据。 这很棒&#xff0c;但是Drill的作用远远不止于此&#xff0c;它允许您创建自定义函数来扩展查询引擎。 这些自定义函数具有Drill基本操作的所有性能&#xff0c;但是允许执行这些性能会使编写这些函数的技巧…

python往npy写入数据_Python 存取npy格式数据实例

数据处理的时候主要通过两个函数(1):np.save(“test.npy”&#xff0c;数据结构) ----存数据(2):data np.load(test.npy") ----取数据给2个例子如下(存列表)1、z [[[1, 2, 3], [w]], [[1, 2, 3], [w]]]np.save(test.npy, z)x np.load(test.npy) x:->array([[list([1,…

Linux上C语言程序编译过程详解

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删本文将介绍如何将高层的C/C语言编写的程序转换成为处理器能够执行的二进制代码的过程&#xff0c;包括四个步骤&#xff1a;预处理&#xff08;P…

hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名

hibernate 别名如果在复杂查询的情况下使用Hibernate模式&#xff0c;则需要使用sql。 因此&#xff0c;sqlRestrictions可以解决。 但是&#xff0c;对联接表别名使用sql限制有点棘手。 将有三个表&#xff1a; 公司表。 员工表。 每个员工都属于一个公司&#xff0c;因此…

C语言,动图展示十大经典排序算法

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删以前也零零碎碎发过一些排序算法&#xff0c;但排版都不太好&#xff0c;又重新整理一次&#xff0c;排序算法是数据结构的重要部分&#xff0c;…

python求偏度系数_用 Python 讲解偏度和峰度

之前笔者在做一个金融数据项目时,有朋友问我,衡量股票收益率有没有什么好的方法。这个问题让笔者也思索了好久,其实股票的收益率如果我们从本质来看不就是数据吗,无非就是收益率我们就想让其越高越好,也就是让这个数据增加得越多越好。而衡量数据我们经常用到的方法有均值…

java ee各类组件_在Java EE组件中使用骆驼路线

java ee各类组件从现在开始我一直在与Camel合作&#xff0c;我真的很喜欢它的简单性。 在Java EE之上使用它一直是一个挑战&#xff0c;我最近发表了一篇关于如何做到这一点的演讲&#xff0c;而在Java EE中引导Camel的不同方法实际上建议使用WildFly-Camel Subsystem 。 在正在…

5gnr帧结构特点有哪些_真空离子束刻蚀设备的结构特点有哪些

离子束刻蚀设备有立式、卧式两种结构。通常情况下&#xff0c;该设备以卧式的结构居多&#xff0c;因为采用卧式结构的话&#xff0c;离子源发出的离子束为水平喷射方向&#xff0c;大部分的刻蚀溅射物将落在真空室的底部&#xff0c;可在一定程度上将溅射材料的重新沉积减少。…

老了就不能编程?大龄程序员在线“辟谣”:15 年后,我变得更好了

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删几年前&#xff0c;Quora 上的一个提问在程序员圈内掀起热议&#xff1a;“随着年龄的增长&#xff0c;人们会对编程失去兴趣吗&#xff1f;预计…

wildfly管理控制台_WildFly管理控制台已更新–请求反馈

wildfly管理控制台红帽JBoss企业应用程序平台&#xff08;EAP&#xff09;和WildFly具有共生关系 。 简而言之&#xff0c;红帽JBoss企业应用程序平台&#xff08;JBoss EAP&#xff09;保留了WildFly社区项目&#xff08;以前称为JBoss Application Server&#xff09;的所有创…

linux 的ip 设置lo_Linux服务器设置静态IP的方法

这里以CentOS 7系列为例设置静态IP&#xff0c;原来RedHat系列的Linux发行版可以通过setup工具方便的设置静态IP&#xff0c;但是在版本7之后setup工具的功能就逐渐减弱了&#xff0c;所以这时候采用修改配置文件的方式来设置静态IP&#xff0c;方法如下&#xff1a;首先注意&a…

性能测试中脚本怎么写_脚本在流程中的性能影响

性能测试中脚本怎么写我们经常看到人们出于各种目的而使用脚本&#xff08;例如&#xff0c;在服务任务&#xff0c;执行侦听器等中&#xff09;。 使用脚本和Java逻辑通常很有意义&#xff1a; 它不需要打包到jar中并放在classpath上 它使流程定义更易于理解&#xff1a;无需…