在过去的几年中,Apache Maven已成为JavaJava EE项目的事实上的构建工具。 但是从两年前开始, Gradle便获得了越来越多的用户。 在我之前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html )之后,在这篇文章中,您将看到如何使用Gradle使用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

Java EE,Gradle和集成测试相关推荐

  1. gradle java_Java EE,Gradle和集成测试

    gradle java 在过去的几年中,Apache Maven已成为Java和Java EE项目的事实上的构建工具. 但是从两年前开始, Gradle便获得了越来越多的用户. 在我之前的文章( ht ...

  2. chameleon 算法_使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试...

    chameleon 算法 从我以前的帖子继续在这里 ,我想我已经了解了Java EE和也的Arquillian,并测试了一些新的(和令人兴奋的)事,我想与大家分享. 但是,在开始之前,我想首先请您注意 ...

  3. 使用Chameleon,Shrinkwrap,Drone / Graphene与Arquillian进行Java EE集成测试

    从我以前的帖子继续在这里 ,我想我已经了解了Java EE和也的Arquillian,并测试了一些新的(和令人兴奋的)事,我想与大家分享. 但是,在开始之前,我想首先请您注意以下几点(这些纯粹是我的观 ...

  4. [JAVA EE] JPA技术基础:完成数据列表的删除

    接上一篇:[JAVA EE] JPA技术基础:完成数据列表显示 本章完成数据列表的删除 修改 UserController.java package com.example.demo.controll ...

  5. java ee eclipse idea,转----从Eclipse转移到IntelliJ IDEA一点心得

    intellij idea.jpg 使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclipse转过来的很多人开始可能不适应,我就把使用过程中的一些经验和常用功 ...

  6. 微服务:Java EE的拯救者还是掘墓人?

    有人认为,微服务的大行其道是在给Java EE下达死刑判决书.也有人认为,Java EE已死的论调可笑至极.读者朋友,你们怎么看? 引言 有人说,Java确实过于臃肿,经常"小题大做&quo ...

  7. jakarta_适用于Java EE / Jakarta EE开发人员的Micronaut

    jakarta 城镇中有一个名为Micronaut的新微服务框架. 在这篇文章中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架. 我是Java EE开发人 ...

  8. Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0

    Apache OpenWebBeans,JSR 365 依赖注入(CDI 2.0)的一种实现,最近发布的 Meecrowave 微服务器的服务器 1.0 为 Java Persistence API( ...

  9. jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut

    jakarta ee 城镇中有一个名为Micronaut的新微服务框架. 在本文中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架. 我是Java EE开发 ...

最新文章

  1. 量子力学 一 基础7 酉算符与Hausdorff-Campbell公式
  2. 完美解答35K月薪的MySQL面试题(三)MySQL是如何实现事务的?
  3. 在线ajax测试,在线测试 - SosoApi,简单强大的api接口文档管理平台
  4. STM32的printf函数重定向
  5. 关于理解《C++ 对象模型》中:把单一元素的数组放在末尾,struct可以拥有可变大小的数组...
  6. linux流量管家安装失败,解决Linux流量统计软件vnstat安装后无法统计流量的问题...
  7. 思科vrf配置实例_从原理到配置,最全的VLAN说明就在这了!
  8. 史陶比尔机器人的 LLI (Low Level Interface)
  9. 查看局域网内的所有设备的IP地址
  10. 【易语言】大漠插件使用
  11. 思科arp欺骗攻击,cdp攻击,DHCP攻击实验命令笔记
  12. Ubuntu16.040如何解决安装网易云音乐后第二次开机打不开问题
  13. 广电行业编码传输系统调研
  14. H5端input标签通过手机软键盘进行搜索,并关闭软键盘
  15. hive:函数:日期比较函数:获取当前日期 + date_add + date_sub函数获取前几天或后几天的日期
  16. 推荐系统组队学习之概述
  17. 颠覆平庸 在技术上持续精进
  18. 腾讯云 wafer2 上手,轻松部署小程序后端!
  19. 【大唐杯备考】——5G网络组网部署(学习笔记)
  20. Modern C++ 学习笔记——C++函数式编程

热门文章

  1. Java 内存模型 JMM 详解
  2. 试编写算法,设任意n个整数存放于数组A[1...n]中,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))
  3. 优秀学生专栏——王浩
  4. java实现加密电话号码,有具体的加密流程注释
  5. bean交个spring和new比较区别
  6. 拼图游戏C语言课设实验报告,C语言拼图游戏实验报告.doc
  7. Dom4j完整教程详解
  8. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
  9. trackby_使用trackBy启动流程
  10. java 换行 运算符格式_Java代码样式运算符换行格式