最近,我们讨论了如何创建独立的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调谐器项目也使用了它,并且运行无测试失败。 这解决了我的前两个目标。

最难的事情是将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扩展 ,其中对该fork进行了一些修复。

因此,我尝试将所有已经拥有的东西汇总起来,以尝试是否可以对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

在雅加达EE TCK中使用Arquillian的可能方法相关推荐

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

    tms tck 最近,我们讨论了如何创建独立的Jakarta Batch测试套件(TCK). 对于大多数提交者而言,使用Arquillian将测试从实现中如何执行抽象化是很自然的. 但是Romain提 ...

  2. 在雅加达EE服务中使用Thymeleaf

    在本教程中,我将向您展示如何将百里叶与雅加达 EE Servlet 集成,以替换在雅加达 EE Servlet 应用程序中使用 JSP. 首先,我将创建一个新的雅加达 EE Servlet Maven ...

  3. 在 Java EE 组件中使用 Camel Routes

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...

  4. 雅加达poi_雅加达EE:干净的板岩

    雅加达poi 该公告雅加达EE不能使用javax.*名称空间是个好消息,并提供雅加达EE用干净的石板上构建和创新企业级Java的未来. 原始提案 可以预见, javax.*和jakarta.*名称空间 ...

  5. react api_使用Java EE 8中的React式API加速服务

    react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...

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

    java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...

  7. 雅加达EE:干净的板岩

    该公告雅加达EE不能使用javax.*名称空间是个好消息,并提供雅加达EE用干净的石板上构建和创新企业级Java的未来. 原始提案 可以预见, javax.*和jakarta.*名称空间将在Java ...

  8. 使用Java EE 8中的反应式API加速服务

    服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...

  9. java jsr_Java EE 7中包含哪些JSR?

    java jsr 我开始填写所有应该包含在Java EE 7中的Java规范请求的表. 由于仍在决定平台版本,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名 ...

最新文章

  1. Global.asax
  2. CPU 乱序执行验证
  3. JAVA知识学习——类的修饰符
  4. 一统江湖的大前端(3) DOClever——你的Postman有点Low
  5. [转]如何使用 DirectX 診斷工具判斷 DirectX 的版本
  6. Vue,简洁方式开发web,仅添加vue.js文件,不使用全家桶
  7. linux下安装redmine2.5.1详细步骤
  8. Dockerfile最佳实践(二)
  9. PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization
  10. 计算机应用入学考试,本科计算机应用入学考试模拟试题.doc
  11. 测试思维:正向思维和逆向思维
  12. 微信微博防劫持短网址生成
  13. 戴着镣铐与狼共舞!深度解读新势力造车迷局
  14. logback springBoot 配置日志
  15. 很NB的发现两个linux server 开发人或者站点(back-end-facility,codeday盛大代号:小虾米)
  16. [SHOI2017]期末考试
  17. Win11系统输入法无法调出问题解决方法
  18. dell r510服务器怎么装系统,DELLR510服务器上安系统
  19. 决策树分类算法的案例(代码实现及运行测试)
  20. System.IO.FileNotFoundException:“未能加载文件或程序集“System.Runtime, Version=5.0.0.0, Culture=neutral, Public

热门文章

  1. jzoj3384-理工男【欧拉定理,gcd,数论】
  2. 各种模板(数据结构图论)
  3. 【KMP】子串拆分(ybtoj KMP-4)
  4. Codeforces Gym - 100917 部分题解
  5. MySQL死锁如何处理
  6. Redis 再牛逼,也得设置密码
  7. 这些代码优化的方法,你都用过吗
  8. Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析
  9. 探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类
  10. String、StringBuilder、StringBuffer三者执行效率