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);}
请注意,我们在上述测试中添加了两件事:
- TestConfigProvider批注
- 注入注解
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编写应用程序
java编写应用程序_为您的Java应用程序编写数据驱动的测试相关推荐
- java 著名的应用程序_即刻就业:java的应用程序有哪些
通常我们一般使用java语言制作web开发,目前市场流行的电商网站等基本都是由java编写后台,著名JavaIDE也是Java写的,比如NetBeans,Eclipse,IDEA,JBuidler等. ...
- java跟python对比_【多年的Java程序员总结Java与Python的对比 】
多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...
- java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习
鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...
- java单机应用程序_一个简单的java桌面应用:单机版IFTTT
1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...
- 用uml设计java应用程序_用UML设计Java应用程序之需求分析
本节向大家介绍一下如何用UML设计Java应用程序, 这里就以图书馆借阅和预定图书和杂志的应用程序为例向大家讲解,主要有需求分析和域分析等内容,相信本节的学习一定会让你对UML设计有新的理解. 用UM ...
- java工程师的一生_百看不厌之一张图诠释程序员的一生
原标题:百看不厌之一张图诠释程序员的一生 01 百看不厌系列之一张图诠释程序员的一生. 02 变得越来越强了... 03 不知道是干什么的,但又不敢删... 04 当前端的人抱怨Java 时,C++程 ...
- java class 文件分析_大概优秀的java程序员都要会分析class文件吧
相信大家在学java的时候都会听到这样的一些结论: enum 是一个类 泛型的实现使用了类型擦除技术 非静态内部类持有外部类的引用 需要将自由变量声明成final才能给匿名内部类访问 ... 初学的时 ...
- java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
本发明涉及java应用与微信小程序应用开发技术领域,具体涉及一种基于java后台应用监控微信小程序的用户访问量的方法. 背景技术: 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,它实现了 ...
- 如何创建第一个java程序_创建第一个java程序
开发环境:ubuntu 10.04 + eclipse 方法一:打开eclipse编译器,选择 File->New->Java project,输入工程名称,点击finish,在工程目录中 ...
最新文章
- 旷视发布《人工智能应用准则》,倡导AI技术健康可持续发展
- CentOS PPTP ×××
- calcite mysql_Apache顶级项目 Calcite使用介绍
- 简单问题:sizeof(char型数组)为数组大小,而不是4, 为什么? 100!
- 产品微操的艺术:提高核心指标的5个需求原理(1~5完)
- ajax put请求_前端基础面试:手写一个ajax,说说XMLHttpRequest 都有哪些属性?
- linux上还原自主nuget包需要注意的问题
- 配置linux系统ip,Linux系统IP地址配置
- 字符串匹配问题(信息学奥赛一本通-T1355)
- SpringBoot2 Spring Cloud Config Server和Config Client分布式配置中心使用教程
- 2021数学建模C题详细思路,代码,论文,参考文献
- Java语言十五讲(总结)
- java遍历变量_java – 循环遍历众多变量
- 网易严选如何打造数仓规范和评价体系
- 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象教学实录及点评...
- 经典问题 小白鼠试毒药 这个算法你绝对不知道
- mysql查询是第几条记录_MySQL查询第几行到第几行记录
- scipy更新后imread,imresize函数被启用,替换方案
- 2021年11月软考网络规划设计师下午真题及答案解析
- 不开玩笑,阿里人真的靠脸吃饭了