gradle java_Java EE,Gradle和集成测试

gradle java

在过去的几年中,Apache Maven已成为JavaJava EE项目的事实上的构建工具。 但是从两年前开始, Gradle便获得了越来越多的用户。 在我之前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html )之后,在本文中,您将了解如何使用Gradle使用Java编写集成测试,以使用Java EE Arquillian

Gradle是类似于Ant或Maven的构建自动化工具,但是引入了基于Groovy的DSL语言而不是XML。 因此,您可能希望生成文件是Groovy文件。 您可以阅读我以前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html ),了解如何安装Gradle

为了编写Java EE的集成测试,事实上的工具是Arquillan。 如果您想了解Arquillian是什么,可以在( http://arquillian.org/guides/getting_started/ )或《 Arquillian In Action》一书中获得《入门指南》 。

要开始使用Arquillian ,您需要添加Arquillian依赖项,它以BOM的形式出现。 Gradle不支持现成的BOM人工制品,但是您可以使用dependency-management-plugin Gradle插件来支持定义BOM

而且Gradle提供了添加除默认源之外的更多测试源集的可能性,在Maven中,默认源是src / test / javasrc / test / resources 。 这个想法是,您可以定义一个新的测试源集,以将所有集成测试放入其中。 通过这种方法,每种测试都可以清楚地分为不同的源集。 您可以在Gradle脚本中编写Groovy代码来实现此目的,也可以只使用gradle-testsets-plugin ,这是最简单的方法。

因此,要注册这两个插件(依赖项和测试集),您需要在build.gradle脚本文件中添加下一个元素:

buildscript {repositories {jcenter()}dependencies {classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE"classpath 'org.unbroken-dome.gradle-plugins:gradle-testsets-plugin:1.2.0'}
}apply plugin: "io.spring.dependency-management"
apply plugin: 'org.unbroken-dome.test-sets'

现在该添加Arquillian依赖项了。 您需要添加Arquillian BOM和两个依赖关系,一个依赖关系设置我们将ArquillianJUnit一起使用,另一个依赖关系将Apache TomEE应用程序服务器设置为在测试运行期间部署应用程序的目标。

Arquillian,TomEEJava EE的依赖可能看起来像的build.gradle:

dependencyManagement {imports {mavenBom 'org.arquillian:arquillian-universe:1.0.0.Alpha1'}
}dependencies {testCompile group: 'org.arquillian.universe', name: 'arquillian-junit', ext: 'pom'testCompile group: 'org.apache.openejb', name: 'arquillian-tomee-embedded', version:'1.7.2'testCompile group: 'junit', name: 'junit', version:'4.12'providedCompile group: 'org.apache.openejb',name: 'javaee-api', version:'6.0-6'}

最后,您可以通过添加下一部分将新的集成测试文件夹配置为源集:

testSets {integrationTests
}

其中integrationTest是测试集的名称。 testSets自动创建并配置下一个元素:

  • src / integrationTests / javasrc / integrationTests / resources作为有效的源集文件夹。
  • 名为integrationTestsCompile依赖关系配置,其从testCompile延伸,另一种称为integrationTestRuntimetestRuntime延伸。
  • 一个名为integrationTestsTest任务,它在集合中运行测试。
  • 一个名为IntegrationTestsJarJar任务,用于打包测试。

注意,您可以将IntegrationTests更改为任何其他值,例如intTests,并且Gradle会将先前的元素自动配置为在testSets中设置的值,例如src / intTests / java ,例如,测试任务将称为intTests

下一步是在IntegrationTests测试集中使用Arquillian创建集成测试。 例如,用于验证您可以在REST API中发布颜色并在调用GET方法时返回颜色的Arquillian测试如下所示:

@RunWith(Arquillian.class)
public class ColorServiceIntegrationTest {@Deploymentpublic static WebArchive createDeployment() {return ShrinkWrap.create(WebArchive.class).addClasses(ColorService.class);}@ArquillianResourceprivate URL webappUrl;@Test @RunAsClientpublic void postAndGet() throws Exception {// POST{final WebClient webClient = WebClient.create(webappUrl.toURI());final Response response = webClient.path("color/green").post(null);assertThat(response.getStatus(), is(204));}// GET{final WebClient webClient = WebClient.create(webappUrl.toURI());final Response response = webClient.path("color").get();assertThat(response.getStatus(), is(200));final String content = slurp((InputStream) response.getEntity());assertThat(content, is("green"));}}public static String slurp(final InputStream in) throws IOException {final ByteArrayOutputStream out = new ByteArrayOutputStream();final byte[] buffer = new byte[1024];int length;while ((length = in.read(buffer)) != -1) {out.write(buffer, 0, length);}out.flush();return new String(out.toByteArray());}}

您现在可以通过简单地执行gradlew integrationTests来运行集成测试

您会注意到,如果您运行gradlew build ,那么集成测试任务将不会运行。 发生这种情况是因为未在默认的构建生命周期内注册任务。 如果要添加IntegrationTests任务以在构建期间自动执行,则需要添加下一行:

check.dependsOn integrationTestintegrationTest.mustRunAfter test

确保集成测试在检查任务之前运行,并且如果集成测试失败,则检查任务会使构建失败,并确保在集成测试之前运行单元测试。 这样可以确保即使集成测试失败也可以运行单元测试。

因此,现在当您运行gradlew buildgradlew build执行集成测试。

最后,如果您正在运行JaCoCo插件进行代码覆盖会发生什么? 您将获得两个JaCoCo文件,一个用于单元测试执行,另一个用于IntegrationTests执行。 但是,您可能希望看到两者的汇总代码覆盖率报告都运行在一个文件中,因此您可以在执行所有类型的测试后检查应用程序的代码覆盖率。 要实现它,您只需要添加下一个任务:

task jacocoRootTestReport(type: JacocoReport) {sourceSets sourceSets.mainexecutionData files(["$buildDir/jacoco/test.exec","$buildDir/jacoco/integrationTests.exec"])reports {xml.enabled falsecsv.enabled false}    
}

在这种情况下,您将创建一个任务,该任务汇总test.exec文件(来自单元测试)和IntegrationTests.exec的覆盖范围结果(来自集成测试)。

为了生成报告,您需要在运行Gradle时显式调用jacocoRootTestReport任务。

因此,编写用于运行Java EE测试的Gradle脚本非常简单,而更重要的是,最终脚本文件看起来非常紧凑且可读性强,而无需严格遵守任何静态约定。

翻译自: https://www.javacodegeeks.com/2015/11/java-ee-gradle-integration-tests.html

gradle java

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

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

相关文章

javafx 内存占用_JavaFX:TouchGesture内存泄漏?

javafx 内存占用在我的一个项目中,最近几天我在与内存泄漏作斗争(是……“耦合”),我得出的结论是可能存在与触摸/滚动手势有关的问题。 在下面的示例中,我有两个按钮。 第一个创建具有一千行的列表视图,第…

手机单选按钮 html5,@html剃刀单选按钮mvc5(@html razor radio buttons mvc5)

这里是我的视图模型public class UserResponseModel{public string QuestionId { get; set;}public string QuestionText { get; set; }public bool IsChecked { get; set; }}所以&#xff0c;对于这个复选框精美作品for (var i 0; i < Model.UserResponses.Count; i){Html…

cucumber jvm_用Cucumber JVM编写BDD测试

cucumber jvmCucumber JVM是编写BDD测试的出色工具。在本文中&#xff0c;我想对Cucumber JVM的BDD进行介绍。 让我们开始吧… 什么是BDD&#xff1f; 简而言之&#xff0c;BDD试图解决“通过示例理解需求”的问题 BDD工具 有许多可用于BDD的工具&#xff0c;有趣的是&#…

计算机网络英文介绍,计算机网络英文自我介绍

计算机网络英文自我介绍It’s my pleasure to introduce myself to you here. My name is XX, Icome from XX which is a beautiful city. And I am a candidate forthe position of Sales Representative. 公务员面试自我介绍I attended Nantong University in 2003. My major…

模拟模型学习 几何布朗运动_Java的几何布朗运动

模拟模型学习 几何布朗运动维纳过程是一个连续时间的随机过程&#xff0c;以纪念诺伯特维纳。 通常用于用随机成分表示噪音或财务状况。 可以计算几何布朗运动以可视化某些界限&#xff08;以分位数表示&#xff09;以暗示绝对范围。 为了进行计算&#xff0c;需要以下参数&am…

计算机网络基础 第4章 龚娟,计算机网络基础 人民邮电 龚娟 第4章习题答案

1&#xff0e;关于IPv4地址的说法&#xff0c;错误的是( C )。A&#xff0e;IP地址是由网络地址和主机地址两部分组成 B&#xff0e;网络中的每台主机分配了唯一的IP地址 C&#xff0e;IP地址只有三类&#xff1a;A&#xff0c;B&#xff0c;CD&#xff0e;随着网络主机的增多&…

动态调整线程池_调整线程池的重要性

动态调整线程池无论您是否知道&#xff0c;您的Java Web应用程序很可能都使用线程池来处理传入的请求。 这是许多人忽略的实现细节&#xff0c;但是迟早您需要了解如何使用该池以及如何为您的应用程序正确调整池。 本文旨在说明线程模型&#xff0c;线程池是什么以及正确配置线…

java系统架构师有的特质_Java中特质模式的定义

java系统架构师有的特质在本文中&#xff0c;我将介绍特征的概念&#xff0c;并为您提供一个具体示例&#xff0c;说明如何在Java中使用它们以减少对象设计中的冗余。 我将首先提出一个虚构的案例&#xff0c;其中可以使用特征来减少重复&#xff0c;然后以使用Java 8的特征模式…

html快速排序,快速排序.html

Titlevar arr2 [13, 4, 35, 67, 86, 24, 86, 34, 76];function quickSort(arr) {//如果数组<1,则直接返回if (arr.length < 1) {return arr;}var pivotIndex arr[arr.length - 1];//找基准&#xff0c;并把基准从原数组删除// var pivotarr.splice(pivotIndex,1)[0];//…

tdd java_Java TDD简介–第2部分

tdd java再次问好&#xff01; 在上一篇博客文章中&#xff0c;我在没有紧密引用Java的情况下总体上解释了TDD理论 &#xff0c;但是在这一部分中&#xff0c;我们开始进行TDD实践。 我们的目标是遍历TDD的所有阶段&#xff1a;从需求分析到测试代码的重构。 我们将在具有Java&…

计算机怎么没有桌面文件夹名称大全,你的电脑文件总是找不到?是时候学习文件夹分类整理了...

我们常常说做好办公整理&#xff0c;我们工作起来才更有效率&#xff1b;此处的办公整理不单单是对办公桌整理整齐&#xff0c;电脑里面的文件也需要定期整理&#xff0c;你有没有发现常常找一个文件的时候却总是找不到&#xff1f;那么此时就应该学习文件夹分类整理了&#xf…

selenide_使用Selenide进行有效的UI测试

selenide等待奇迹 圣诞节是奇迹的时刻。 在新的一年的前夕&#xff0c;我们都会制定下一个计划。 我们希望所有问题都将在最后一年消失&#xff0c;在来年出现奇迹。 每个Java开发人员都梦想着奇迹&#xff0c;使他成为世界上最有效的Java开发人员。 我想向你展示这样的奇迹…

计算机无法维修技术鉴定,计算机维修工技能鉴定(初级)剖析..pdf

计算机(微机)维修工初级理论知识复习题一、单项选择1、液晶显示器画面出现闪动的现象&#xff0c;原因可能是 ( C )。A 、数据线与显卡接口接触不良 B、操作系统有问题C 、显示器与主板不兼容 D、以上都不正确2、职业道德内涵是从事一定职业的人们在职业活动中应该遵循的&#…

实践与反思_在行动中反思的实践

实践与反思在上一篇文章中 &#xff0c;我解释了最基本的敏捷实践是反思。 在本文中&#xff0c;我概述了组织&#xff0c;团队和人员如何在行动中运用反思的示例。 回顾反思 回顾是功能强大的工具&#xff0c;整个团队都可以使用它们来反思其当前的工作实践&#xff0c;以了解…

win10无法更改计算机设置,Win10“无法保存ip设置,请检查一个或多个设置并重试”的解决方法...

近期有网友想要在Win10系统中手动设置本机IP地址&#xff0c;但是填写完毕之后却提示了“无法保存ip设置,请检查一个或多个设置并重试”&#xff0c;那么遇到这个问题&#xff0c;我们要如何解决呢&#xff1f;下面装机之家分享一下Win10“无法保存ip设置,请检查一个或多个设置…

24段魔尺拼图指南_拼图项目动手指南

24段魔尺拼图指南Jigsaw项目将把模块化引入Java平台&#xff0c;根据原始计划&#xff0c;它将在12月10日完成功能。 所以我们在这里&#xff0c;但拼图在哪里&#xff1f; 在过去的六个月中肯定发生了很多事情&#xff1a; 原型问世 &#xff0c;内部API的迫在眉睫的删除引起…

2018深大计算机考研,深圳大学2018年硕士生招生复试分数线及调剂需求

深圳大学2018年硕士生招生复试分数线及调剂需求深圳大学硕士研究生复试分数线是在通过国家A类线(国家线)的基础上&#xff0c;按各专业复试人数中最后一名考生的总分成绩确定的。根据我校高水平大学建设目标&#xff0c;原则上只接收全日制本科毕业于具有推荐优秀应届本科毕业生…

sql 解析 java_将Java 8流解析为SQL

sql 解析 java当Java 8发行并且人们开始流式处理各种东西时&#xff0c;不久之后他们就开始想象如果可以以相同的方式使用数据库将有多大的潜力。 本质上&#xff0c;关系数据库由以表状结构组织的巨大数据块组成。 这些结构非常适合进行过滤和映射操作&#xff0c;如SQL语言的…

Socket编程项目VS开发环境配置

项目属性->连接器->输入->附加依赖项里加入ws2_32.lib

杭州电子科技大学保研计算机,杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则...

杭州电子科技大学计算机学院计算机科学与技术(一级学科)保研细则信息&#xff0c;是考研之前需要获取相应的考研信息&#xff0c;比如考试大纲、招考专业、招考目录等等基本信息&#xff0c;这些内容是进行考研前期工作的必要准备。考生可以从各院校的研招网进行查询&#xff0…