针对新手的Java EE7和Maven项目–第5部分–使用Arquillian / Wildfly 8进行单元测试

从前面的部分恢复

第1 部分 , 第2 部分 , 第3 部分 , 第4部分 ,
这是第一篇“额外”的帖子,基于我正在此系列博客文章上“构建”的Maven JavaEE7演示项目。 我们已经定义了一个坚实的结构和一些模块。 在这样的应用程序中,一个非常常见的情况是使用Arquillian (+ JUnit ),这是一个上帝赐予的框架,它使我们能够使用“真实的”应用程序服务器对EJB服务进行单元测试,最有可能与我们将要使用的相同。部署到。 我实际上遵循的是这里的基本设置指南,不同之处在于,我将Wildfly 8.1设置为嵌入式容器来承载单元测试。 Widlfy 8.1是一个功能强大的JavvaEE7容器,因此我可以安全地测试所有功能。

Arquillian心态和Maven

为了在Maven化的项目中采用Arquillian,您需要了解的基本知识之一是以下实际上作为依赖项实现的术语(思想)。

  • 当然,您需要Arquillian框架/库,想象一下这是一辆新车,但缺少它的引擎。 前部是空的。
  • 您需要一个Arquillian Container Adapter ,假设您需要在汽车的前部安装某种占位符 ,例如将要使用的框架,以便可以“安装”发动机。
  • 您需要一个真正的容器(应用程序服务器),这是我们要安装在汽车中的引擎
  • 您需要JUnit ,这是您的汽车将要运行并进行测试的“ 测试 轨道 ”。
  • 您需要您的代码(您的EJB),这些代码将被放置在汽车中并在Junit轨道上测试行程的乘客。

定义对父pom的依赖

正如我们在前4个帖子中已经详细说明的那样,父pom是定义要在我们的应用程序中使用的依赖项及其库版本的地方。 请记住上面的术语列表,让我们开始并更新父pom的dependencyManagement部分。

<junit-version>4.11</junit-version><arquillian-version>1.1.4.Final</arquillian-version><arquillian-wildfly-version>8.1.0.CR2</arquillian-wildfly-version><arquillian-transaction-version>1.0.1.Final</arquillian-transaction-version></properties><dependencyManagement><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>${javaee-api-version}</version></dependency><!-- -JUNIT--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit-version}</version></dependency><!-- rquillian itself--><dependency><groupId>org.jboss.arquillian</groupId><artifactId>arquillian-bom</artifactId><version>${arquillian-version}</version><scope>import</scope><type>pom</type></dependency><!-- this is in an extention to arquillian it is optional--><dependency><groupId>org.jboss.arquillian.extension</groupId><artifactId>arquillian-transaction-bom</artifactId><version>${arquillian-transaction-version}</version><type>pom</type><scope>import</scope></dependency><!-- this is container adapter for wildfly--><dependency><groupId>org.wildfly</groupId><artifactId>wildfly-arquillian-container-embedded</artifactId><version>${arquillian-wildfly-version}</version></dependency><!-- this is the wildfly emb.container - BUT eventually it is not a fully blown emb.container--><dependency><groupId>org.wildfly</groupId><artifactId>wildfly-embedded</artifactId><version>${arquillian-wildfly-version}</version></dependency></dependencies></dependencyManagement>

有关上述片段的一些技巧:

  • 一些依赖项是pom类型和作用域导入。 实际上,这是一起定义依赖项组的一种特殊情况。 pom类型依赖性表示这是在此定义下分组在一起的一组单个库。 您只需要定义该超级pom,您将继承其中的各个依赖项。 在Maven术语中,这种依赖性分组称为“ BOM ”或也称为“ 物料清单 ”。 Arquillian由几个具体的库和依赖项组成,而不是一个一个地定义每个库,如果定义arquillian-bom,则结果相同。
  • arquillian-transaction-bom ”是一个可选的依赖项,您可以不定义它,它为Arquillian引擎和您的测试中添加了额外的功能。 最著名的“额外”功能之一是“ @Transactional” arquillian注释。 在此处或此处查看详细信息。
  • Wildfly和JBoss的特殊情况。 您会注意到依赖项“ wildfly-embedded ”,并假设它是Wildfly应用程序服务器的“ 嵌入式 ” uber jar版本,例如Glassfish的版本。 最终不是这样,这是人们在尝试使用Wildfly设置Arquillian时常犯的错误。 为了使整个工作正常进行,您需要下载“真实的”应用程序服务器。 请看以下部分,将在哪里解决这个特殊情况。

为Arquillian和测试配置我们的ejb模块

在演示应用程序中,我们已将大多数EJB服务“编码”在名为sample-ejb的模块上。 因此,我们需要在其pom中添加额外的配置,以便在该模块的测试阶段“ 触发 ” junit + arquillian测试。

大多数配置将在此pom上执行,以覆盖Widlfly的这种“ 特殊 ”情况,即未作为完全吹入的嵌入式容器提供。 因此,为了使整个机制正常工作,我们需要在测试阶段告诉Maven,下载Wildfly.zip(例如,使用浏览器进行此操作),将其解压缩到某个地方,然后将Arquillian指向路径。 完成后,rAquillian将接任。

事先下载wildfly服务器

下面的配置写在sample-services pom(我们的“ EJB服务”模块)中:

<plugin><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>unpack</id><phase>process-test-classes</phase><goals><goal>unpack</goal></goals><configuration><artifactItems><artifactItem><groupId>org.wildfly</groupId><artifactId>wildfly-dist</artifactId><version>8.1.0.Final</version><type>zip</type><overWrite>false</overWrite><outputDirectory>target</outputDirectory></artifactItem></artifactItems></configuration></execution></executions></plugin>

有关上述片段的一些技巧:

  • 我们使用maven-dependency-plugin
  • 我们指示插件在Maven生命周期的“过程测试类”阶段启动,以及在执行“解压”目标时启动。 因此,在Maven开始运行测试之前,配置的上述部分将已将Wildfly 8.1下载并解压缩到类路径中。

使用maven运行测试– surfire插件

同样,下面的代码是sample-services.pom的一部分。 我们实际上配置了Maven Surefire插件,它是执行Junit-Arquilian测试的插件。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><!-- Fork every test because it will launch a separate AS instance --><forkMode>always</forkMode><systemPropertyVariables><java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager><jboss.home>${project.basedir}/target/wildfly-8.1.0.Final</jboss.home><module.path>${project.basedir}/target/wildfly-8.1.0.Final/modules</module.path></systemPropertyVariables><redirectTestOutputToFile>false</redirectTestOutputToFile>/configuration></plugin>

有关上述片段的一些技巧:

  • Surefire为单元测试提供了执行环境。 在我们的案例中,我们有Junit-Arquillian进行的测试。 为了使Arquillian正确地初始化自身并标识容器,我们需要将其作为系统参数传递给下载应用程序服务器的路径。 请记住,wildfly / jboss是一个特例。 该容器将已经下载到/ target文件夹中。

在sample-services模块上添加所需的依赖项

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.junit</groupId><artifactId>arquillian-junit-container</artifactId><scope>test</scope></dependency><dependency><groupId>org.wildfly</groupId><artifactId>wildfly-arquillian-container-embedded</artifactId><scope>test</scope></dependency><dependency><groupId>org.wildfly</groupId><artifactId>wildfly-embedded</artifactId><scope>test</scope></dependency><dependency><groupId>org.jboss.arquillian.extension</groupId><artifactId>arquillian-transaction-jta</artifactId><scope>test</scope></dependency>

创建样本测试

package gr.javapapo;import org.jboss.arquillian.container.test.api.Deployment;import org.jboss.arquillian.junit.Arquillian;import org.jboss.shrinkwrap.api.ShrinkWrap;import org.jboss.shrinkwrap.api.asset.EmptyAsset;import org.jboss.shrinkwrap.api.spec.JavaArchive;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import javax.ejb.EJB;/*** Created by papo on 5/31/14.*/@RunWith(Arquillian.class)public class DemoArquillianTest {@EJBUserServices dummyService;@Deploymentpublic static JavaArchive createDeployment() {return ShrinkWrap.create(JavaArchive.class).addClass(UserServices.class).addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");}@Testpublic void testSaysHello() {Assert.assertEquals("hello",dummyService.sayHello());}}

我们完了

在样本父文件夹级别下,键入:

mvn clean package
  • 该示例的完整代码可在以下bitbucket标签上找到。

翻译自: https://www.javacodegeeks.com/2014/06/java-ee7-and-maven-project-for-newbies-part-5-unit-testing-using-arquillian-wildfly-8.html

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

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

相关文章

C/S,B/S的区别与联系

C/S 是Client/Server 的缩写。服务器通常采用高性能的PC、工作站或小型机&#xff0c;并采用 大型数据库系统&#xff0c;如Oracle、Sybase、Informix 或SQL Server。客户端需要安装专用的客户 端软件。 B/&#xff33;是Brower/Server 的缩写&#xff0c;客户机上只要安装一个…

五年级下册电子计算机与多媒体,语文人教版五年级下册《电子计算机与多媒体》.doc...

《电子计算机与多媒体》教学设计沈彦坤 石家庄市鹿泉区石井乡封庄小学?一、概述??语文&#xff0c;五年级五年级下册&#xff0c;第一课时熟悉课文内容,学会生字,理解新词意思&#xff0c;学习课文1-3段。了解计算机的产生与发展&#xff0c;了解什么是多媒体,计算机与多媒体…

Airflow安装与使用

# Airflow 1.10安装本次安装Airflow版本为1.10&#xff0c;其需要依赖Python和DB&#xff0c;本次选择的DB为Mysql。本次安装组件及版本如下&#xff1a;Airflow 1.10.0Python 3.6.5Mysql 5.7# 整体流程1. 建表2. 安装3. 配置4. 运行5. 配置任务启动scheduleairflow schedul…

Wordpress安装

Wordpress是一种用PHP语言和MySQL的数据库的开源的免费Blog引擎&#xff0c;用户可以在支持PHP和MySQL数据库的服务器上建立自己的Blog,它具有非常强大的功能和成千上万的插件和模板主题。安装步骤如下(本文以Wordpress2.6中文版为例): (1) 在MySQL中创建Wordpress库&#xff0…

python 内置标准库socketserver模块的思考

socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错。它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 BaseRequestHandler. BaseServer 基本服务器类封装了基本的一些socket操作, socket原语中对so…

关于素数的一些定理

1.何谓素数&#xff1f; 指在一个大于1的整数中&#xff0c;如果一个数只能整除1与本身&#xff0c;则该数为素数&#xff08;质数&#xff09;&#xff0c;否则为合数。 1既不是素数也不是合数 2.素数个数无限多 3.所有大于2的素数都可以唯一的表示为两个平方数之差 pa^2-b^2(…

教师节的感触

刚喝了点酒&#xff0c;因为今天是教师节&#xff0c;我觉得博客是一个很好的平台&#xff0c;可以把自己的一些感想就是的发表出来。把音乐放出来一 边写着博客是一种很自我的感觉&#xff0c;可以在微酣的时候把自己的点滴感受好好的梳理一下倒是一种不错的方式。这是自己第一…

Spring 4.1和Java 8:java.util.Optional

由于Spring 4.1的Java 8的的java.util.Optional &#xff0c;容器对象可能会或可能不包含非空值&#xff0c;支持与RequestParam &#xff0c; RequestHeader和MatrixVariable 。 使用Java 8的java.util.Optional请确保参数永远不会为null 。 请求参数 在此示例中&#xff0c;…

计算机网络层实验路由表苏州科技,苏州科技大学计算机网络实验报告课案.docx...

苏州科技大学计算机网络实验报告课案苏州科技学院 电子信息实验中心实验报告课  程计算机网络原理学    名徐金玮班  级计算机1312专  业计算机科学与技术指导教师陶滔学年 / 学期2015~2016学年第一学期实验一 物理层实验实验项目性质&#xff1a;设计性  计划学…

Fibonacci again and again

Fibonacci again and again http://acm.hdu.edu.cn/showproblem.php?pid1848 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12494 Accepted Submission(s): 5439 Problem Description任何一个大学生对菲波那…

使用闭包的方式实现一个累加函数 addNum

使用闭包的方式实现一个累加函数 addNum&#xff0c;参数为 number 类型&#xff0c;每次返回的结果 上一次计算的值 传入的值&#xff0c;如&#xff1a; addNum(10); //10 addNum(12); //22 addNum(30); //52 写法一 1 function sum(numberOne) {2 var count…

妈妈的菜谱-豉油鸡

我妈周末来我家&#xff0c;给我做一道豉油鸡&#xff0c;我记录下来&#xff0c;分享给大家 1、下午四点半左右&#xff0c;我、老弟以及亲妈&#xff0c;到隔壁市场鸡场&#xff0c;挑选了一只类似的芦花阉鸡活鸡&#xff0c;价格是17块钱每斤&#xff0c;大概三斤多点&#…

【Vegas2008】9月19日-青椒炒南瓜

南瓜&#xff0c;在俺们家&#xff0c;宁夏也叫葫芦。这道菜泡米饭相当好吃。 主料&#xff1a;青椒、南瓜 配料&#xff1a;葱、姜 调料&#xff1a;盐、味精、胡椒粉 做法&#xff1a;1&#xff0c;南瓜切块&#xff0c;青椒切块&#xff1b;2&#xff0c;油烧至6成熟&#x…

计算机机房t4,机房等级-T2-T3-T4-如何划分

如何在众多的IDC服务商中的辨别出服务器和机房环境的好坏呢?小编告诉大家有这么个指标是我们在选购服务器的时候可以参考&#xff0c;且具有权威性的。国际正常时间协会(the Uptime Institute&#xff0c;简称UI)依据数据中心基础设施的可用性把机房划分为四个级别&#xff1a…

在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体

N 1问题是使用ORM解决方案时的常见问题。 当您将某些OneToMany关系的fetchType设置为lazy时&#xff0c;会发生这种情况&#xff0c;以便仅在访问Set / List时才加载子实体。 假设我们有一个具有两个关系的Customer实体&#xff1a;每个客户的一组订单和一组地址。 OneToMany…

JetBrains系列IDE快捷键大全(转载)

编辑 快捷键组合说明Ctrl Space代码自动完成提示&#xff08;选择&#xff09;Alt Enter显示意图动作和快速修复Ctrl P参数信息 &#xff08;在调用方法参数忘记的时候&#xff0c;提示&#xff09;Ctrl Q快速查找文件&#xff0c;可以查找当前类定义的文件等Ctrl 鼠标滑过…

Vs Code 配置C/C++ 开发环境

第一步&#xff1a;下载 Vs Code 点击链接下载Vs Code 下载版本 并安装 https://code.visualstudio.com/ 点击 Download for Windwos 安装时 如图&#xff1a;请一定要勾选 添加到PATH (环境变量&#xff09; 其他选项可根据个人需要选配 但建议全部勾选 第二步&#xf…

28. css样式中px转rem

Vue3:脚手架配置 https://blog.csdn.net/weixin_41424247/article/details/80867351 与原来的vue-cli 2.x版本不同的是&#xff1a;如果使用最新版本的vue/cli初始化vue项目时&#xff0c;通常看不到webpack的配制文件。而在原来的2.x版本&#xff0c;我们可以在utils.js中轻…

集合已修改;可能无法执行枚举操作。

在对某个List进行遍历的同时&#xff0c;需要对其中的Item进行删除操作。 会提示错误&#xff1a;集合已修改&#xff1b;可能无法执行枚举操作 Codeforeach (VirtualTDate vtDate in tempList){ if (vtDate.Date itemTime.Date) { tempList.Remove(vtDate); …

UI测试脸型软件,App脸型美化剖析|UI-影视-其他|观点|freshoil - 原创文章 - 站酷 (ZCOOL)...

本文基于市面上多款App的美颜效果&#xff0c;做了一个对比分析&#xff0c;整理出一个可以指导美颜调教的参考规范。研究的几个要点如下&#xff1a;1.通过对 某陌、某音、某Y、某他相机、某天P图的效果对比分析2.本次只针对默认效果做对比(某Y无默认则选择自然)3.统一使用前置…