tms tck_在雅加达EE TCK中使用Arquillian的可能方法

tms tck

最近,我们讨论了如何创建独立的Jakarta Batch测试套件(TCK)。 对于大多数提交者而言,使用Arquillian将测试从实现中如何执行抽象化是很自然的。 但是Romain提出了一个有趣的想法,即使用纯JUnit5引起了我的思考。 它并没有止于思考。 经过数小时的黑客攻击后,我现在可以提出概念证明,并提出如何将普通的JUnit5用于TCK的建议,以及如何使用良好的旧Arquillian将容器与之集成,以避免重新发明轮子。

当前的独立Batch TCK的问题在于它基于TestNG,并且仅支持在与测试套件相同的类路径上运行的Batch实现。 因此,它不支持在Java容器(如应用程序服务器)中运行测试。 现在,只有Jakarta测试套件(CTS)支持此类容器,该套件包含一个批处理TCK测试的副本,该测试使用专有技术在容器中运行测试。

还有其他带有独立TCK或计划创建它的Jakarta EE规范:

  • CDI TCK –与Arquillian一起使用TestNG
  • Bean验证 –与Arquillian一起使用TestNG
  • JSON-B –正在进行中,与Arquillian一起使用JUnit 4
  • DI TCK – JUnit 4

显然Arquillian在其中很受欢迎。 只有DI TCK不使用它。 但是DI TCK本身也不支持在远程容器中执行,它仅支持设置本地容器,例如,如果实现支持,则使用CDI SE API。

我的概念证明有3个目标:

  1. 改进TCK,使其可以与Java容器集成
  2. 修改现有示例项目以使用TCK运行JBatch
  3. 创建另一个将TCK与典型的Jakarta EE服务器(例如Payara Server)集成的示例

如果可以的话,我更喜欢循序渐进而不是爆炸式发展。 而且我意识到,即使我找到了使用JUnit 5的解决方案,无论如何我都可能需要Arquillian与Payara Server集成以实现我的第三个目标。因此,我首先在当前的Batch TCK中添加了对Arquillian的支持,后来希望重用它。将Payara Server与JUnit 5集成在一起。事实证明,这是一种很好的方法,并且不会浪费任何代码。

添加对Arqullian的支持

在批处理TCK中添加对Arquillian的支持非常简单,因为测试已使用TestNG,而Arquillian开箱即用地支持TestNG。 唯一棘手的部分是为Arquillian所需的每个测试创建一个部署程序包。 最后,这非常容易,不需要修改测试源。 Arquillian允许创建扩展以为每个测试定义部署程序包,因此我能够将部署程序包的创建移到单独的扩展程序中。 需要在容器中运行测试的实现可以使用此扩展,但TCK本身不需要此扩展。

TCK中唯一需要的更改是更改每个测试以扩展Arquillian TestNG基类,仅此而已。

在测试套件的顶部,批处理TCK包含一个示例TCK运行器项目,该项目针对JBatch实现运行TCK。 这也需要稍作更改。 我添加了Arquillian Weld SE连接器,该连接器在Weld CDI容器中运行Arquillian TestNG测试。 这意味着测试将在与测试套件相同的类路径上执行,并且不需要Arquillian部署。

您可以在这里在我的叉子上看到最终结果: https : //github.com/OndroMih/batch-tck/pull/1 。 总之,我向每个TCK测试添加了一行代码,并修改了批处理TCK和JBatch的TCK运行器的pom.xml。

这使我可以创建一个示例项目 ,以使用远程服务器(如Payara Server)运行TCK。 这个示例项目包含我上面提到的Arquillian扩展。 此扩展使用Maven解析器库来解析项目的pom.xml文件中的JAR依赖项,并将其打包到Arquillian的WAR部署中。 它并不复杂,只需要几行代码: MavenTestDependenciesDeploymentPackager.java

将TCK转换为JUnit5

将基于TestNG的TCK转换为JUnit 5非常简单。 除了用JUnit 5等效项替换所有TestNG注释外,我还需要用标准Java JUL日志记录替换TestNG报告。

您可以在这里查看我的转换的最终结果: https : //github.com/OndroMih/batch-tck/pull/2 。 更改了TCK,并且JBatch调谐器项目也使用了它,并且运行无测试失败。 这解决了我的前2个目标。

最难的事情是将JUnit 5测试套件与Payara Server连接起来以满足我的第3个目标。 为此,我需要解决以下问题:

  • 创建一个部署程序包以将测试部署到Payara Server
  • 创建一个JUnit 5扩展以在Payara Server中运行测试并向后报告结果

在上一步中,我已经使用Arquillian扩展解决了第一个问题。 似乎有一个非正式的JUnit 5扩展可以运行Arquillian测试。 是的,它确实有效,我能够将所有这些合并为最终实现我所有3个目标的解决方案。

使用Arquillian运行JUnit 5 TCK

幸运的是,Arquillian社区一直在为JUnit 5提供支持 。 尽管在等待仅在JUnit 5.5中添加的基本扩展点时花了一些时间,但是现在有一个非正式的arquillian-junit5扩展 , 此分叉中有一些修复程序。

因此,我尝试将所有已经拥有的东西汇总起来,以尝试是否可以对Payara Server运行转换后的JUnit 5 Batch TCK:

  • 使用JUnit 5 Batch TCK作为依赖项
  • 添加arquillian-junit5扩展名(从本地本地构建)
  • 添加我之前创建的Arquillian部署扩展
  • 将Arquillian配置为与Payara连接器一起运行,就像我之前所做的那样

因此,我做到了,启动了Payara Server,配置了必要的JDBC资源,并执行了以下操作:

Java

 mvn verify 

……并祈祷。

几分钟后:

Java

 Results:  Tests run: 164 , Failures: 0 , Errors: 0 , Skipped: 3 

一切正常! 这包括所有TCK测试,包括要求具有Jakarta EE功能的测试,并且这些测试无法针对独立的Batch实现(如JBatch)运行。 TCK目前正在跳过这3个被跳过的测试,而不是我的配置正在跳过这些测试。

摘要

我能够演示有多种方法可以改进现有的独立Jakarta EE TCK或以现代方式从完整的Jakarta CTS套件中创建新的。

其中之一是将Arquillian添加到JUnit 4或TestNG测试套件中的一种行之有效的方法,并且期望所有实现都提供Arquillian容器来运行它们的测试。 如所示,只需几行代码,这很容易,编写一个简单的Arquillian扩展来定义所有测试的部署。

但是,还有一种有趣的新方法可以使用JUnit 5,它是Java最先进的测试框架之一。 JUnit 5提供了足够的扩展点,并且还允许为所有测试全局启用扩展。 这意味着测试不需要包括启用扩展所需的任何模板代码。 正式发布后,实现者可以使用Arquillian通过现有的JUnit 5 Arquillian扩展来运行测试,也可以创建自己的JUnit 5扩展以将测试与其实现连接。 或者他们可以自由使用现有的非官方JUnit 5 Arquillian扩展,甚至可以根据需要进行修改,因为他们可以真正使用他们想要的任何东西。

翻译自: https://www.javacodegeeks.com/2020/04/possible-ways-to-use-arquillian-in-jakarta-ee-tcks.html

tms tck

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

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

相关文章

本地方法(JNI)——使用调用API

【0】README 1) 本文文字描述source code 均转自 core java volume 2 , 旨在理解 本地方法(JNI)——使用调用API 的基础知识 ; 2) for source code, please visit : https://github.com/pacosonTang/cor…

Shell入门(四)之数组

一、一维数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。 类似与C语言,数组元素的下标由0开始编号。 二、定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。…

aws cloud map_销毁AWS资源:Cloud-Nuke还是AWS-Nuke?

aws cloud map因此,您在开发帐户上工作,并且Terraform陷入了一个循环,难道不让您轻易销毁剩余资源吗? 进入nuke CLI的世界! 在撰写本文时,我使用的是v0.1.16版本 用Go语言编写的《 Gruntwork》不会破坏掉…

mysql error 1045 的解决方法

【0】README 1)以下是 解决方法的steps: step1)点击 skip 和 cancel 退出 mysql 配置 step2) 重启mysql server config wizard, 然后 remove instance step3) 随后卸载mysql(通过360或 …

Shell入门(五)之参数

一、Shell 传递参数 在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,0为执行文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推 比如&…

openj9下载_Quarkus on OpenJ9 JVM和资源消耗

openj9下载除了本机模式,Quarkus在JVM模式下也能很好地运行,这有其自身的优势。 您可以使用替代的JVM,例如OpenJ9,它可以更好地消耗资源。 在下面的视频中,我将展示交换JVM有多么容易。 在视频中,我在最新…

Shell入门(六)之算术运算

一、数学运算 (1)原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 (2)expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 ex…

java数据库编程——执行SQL 语句

【0】README 1) 本文文字描述source code 均转自 core java volume 2 , 旨在理解 java数据库编程——执行SQL 语句 的基础知识 ; 2)for source code, please visit : https://github.com/pacosonTang/core-java-vol…

php cdi_Quarkus的其他(非标准)CDI功能

php cdiQuarkus支持CDI(上下文和依赖注入)2.0,但并非全部,仅支持最常见的功能。 但是,Quarkus确实包含一些非标准功能,这些功能对于开发人员非常方便,我想在下面的视频中进行展示。 不管您是否…

Shell入门(七)之关系运算

一、关系运算 shell关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 a10 b20 运算符说明举例-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否相等,不相等返回 true。[ $a -ne $…

java数据库编程——Insert and Retrieve Images from MySql Table Using Java

【0】README0.1)本文翻译自 http://harmeetsingh13.blogspot.jp/2013/03/insert-and-retrieve-images-from-mysql.html【1】正文如下:段1)演示 从数据库表中插入和查询出图片。大多数情况下,图片数据都存储在数据库外部的一些文件…

Shell入门(八)之布尔运算

一、常规的布尔运算 常规的布尔运算符有:!、&&、|| 使用语法 ! exp exp && exp exp || exp [[ n op m && a op b]] ... exp为[ n op m ]或test n op m或true或false 二、条件测试的布尔运算 条件测试的布尔运算有:!、…

java switch语句_Java 14:查看更新的switch语句

java switch语句于2020年3月发布的JDK 14带有switch语句的更新版本。 这是JDK 12和JDK 13中的预览功能。 要了解差异,让我们看一个简单的示例。 假设我们要基于DayOfWeek枚举来计算每日工作时间。 使用旧的使用switch语句的方法,我们的解决方案可能如下…

java数据库编程——执行查询操作(一)

【0】README 1) 本文部分文字描述和source code 均转自 core java volume 2 , 旨在理解 java数据库编程——执行查询操作 的基础知识 ; 2) 本文和 java数据库编程——执行查询操作(二) 是姊妹篇&#xff…

Shell入门(九)之字符串比较

一、字符串比较 字符串比较符:、!、-z、-n、str 实际上,shell不区分数值与字符串类型,数值也可以使用上面比较。 a"mk" b"maokun" 运算符说明举例检测两个字符串是否相等,相等返回 true。[ $a $b ] 返回…

java中将毫秒转换成时间_在Java中将时间单位转换为持续时间

java中将毫秒转换成时间java.util.concurrent.TimeUnit以给定的粒度单位表示Java中的持续时间,并提供跨单位转换的实用方法。 java.util.concurrent.TimeUnit最早是在Java早期(1.5)引入的,但自那时以来已经扩展了好几次。 在此博客…

java数据库编程——执行查询操作(二)

【0】README 1) 本文部分文字描述和source code 均转自 core java volume 2 , 旨在理解 java数据库编程——执行查询操作(二) 的基础知识 ; 2) 本文和 java数据库编程——执行查询操作(一&…

Shell入门(十)之echo

一、echo参数 echo [参数选项] 字符串 参数选项 -e 解析字符串中的转义字符,如\n -E 这是默认设置,不解析转义字符 -n 不输出换行,可以使用echo -e 字符串"\c" 代替 #!/bin/bash a"abc\n" echo $a echo -e…

vaadin_Vaadin提示:延迟加载和商品标识

vaadin延迟加载 在Vaadin中使用网格,树或任何其他多值组件时,您通常希望显示数据库表中的数据,并且通常数据库中有多行。 在这种情况下,加载数千甚至数百万条记录是没有意义的,这将是一个巨大的性能问题。 对于此用例&…

com.mysql.jdbc.NotUpdatable: Result Set not updatable (references no primary keys).(解决方法)

【1】异常详细信息 com.mysql.jdbc.NotUpdatable: Result Set not updatable (references no primary keys). This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, …