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

java ee maven

从前面的部分恢复

第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

java ee maven

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

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

相关文章

哪些原因会导致rs485转换器信号受干扰?

485转换器主要的作用是将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。由于长距离信息传输、抗干扰能力强等原因&#xff0c;rs485转换器在安防通信等领域得到普遍的使用。但是&#xff0c;经常会有使用者遇到信号受到干扰的情况&#xff0c;那么&#xff0c;哪些原因…

无线传感器在智能家居中的应用

传统的传感器在智能家居领域的应用中任然还是存在着一定的局限性&#xff0c;与总线相连的传感器价格昂贵&#xff0c;传感器组网的开销成本巨大&#xff0c;在一些特殊的区域布线很困难&#xff0c;不同类型的传感器和控制系统的软硬件之间协议不兼容。 在此背景下&#xff0c…

光猫、路由器、交换机、wifi通俗释义

如今&#xff0c;网络已经进入了千家万户&#xff0c;上网已成为了我们生活中必不可少的事情。通常&#xff0c;在家里最常见的网络设备有&#xff1a;光猫&#xff08;光调制解调器&#xff09;、路由器、交换机、wifi&#xff0c;但很多小白用户并不能轻易区分它们。当遇上网…

物联网无线技术蓝牙和WiFi的区别有哪些?

在现在物联网井喷式发展的大环境下&#xff0c;联网设备的数量也越来越多&#xff0c;无缐通信技术在物联网中发挥的作用也越来越大。无线网络技术的发展正在不断的改变信息发送的方式&#xff0c;在任何时间、任何地点都能够无缝、自由地访问信息正在使设备和用户环境发生戏剧…

物联网的应用领域有哪些?

智能仓储 目前&#xff0c;国内最成熟的智能仓储解决方案智能仓储解决方案&#xff0c;智能仓储是物流过程的一个环节&#xff0c;智能仓储的应用&#xff0c;保证了货物仓库管理各个环节数据输入的速度和准确性&#xff0c;确保企业及时准确地掌握库存的真实数据&#xff0c;…

光猫是什么?光纤猫的工作原理及应用范围介绍!

光猫就是“光modem”&#xff0c;是指将光以太信号转换成其它协议信号的收发设备&#xff0c;也是起着调制解调的作用。光猫也称为单端口光端机&#xff0c;该设备作为本地网的中继传输设备&#xff0c;适用于基站的光纤终端传输设备以及租用线路设备。而对于多口的光端机一般会…

UART串口协议详解

通用异步收发器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称作UART&#xff0c;是一种串行、异步、全双工的通信协议&#xff0c;在嵌入式领域应用的非常广泛。 UART作为异步串行通信协议的一种&#xff0c;工作原理是将传输数据的每个二进制位…

Modbus通讯协议

Modbus协议概述 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议&#xff0c;控制器相互之间、控制器经由网络&#xff08;例如以太网&#xff09;和其他设备之间可以通信。它已经成为一种通用工业标准。有了它&#xff0c;不同厂商生产的控制设备可以连成工业网络…

宽带猫、路由器、交换机的作用与区别是什么?

路由器是连接因特网中各局域网、广域网的设备&#xff0c;它会根据信道的情况自动选择和设定路由&#xff0c;以最佳路径&#xff0c;按前后顺序发送信号的设备。路由器是互联网络的枢纽、"交通警察"。目前路由器已经广泛应用于各行各业&#xff0c;各种不同档次的产…

lambdas for_借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

lambdas forAssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具。 不幸的是直到最近&#xff0c;还不能一起使用它。 但是随后Java 8进入了游戏&#xff0c;几十行代码足以使其在Awaility 1.6.0中实现。 AssertJ提供了一组丰富的断言&#xff0c;其中包含非常有用…

多家大厂接连停产,半导体“最后一里路”面临“瘫痪”?

“6月4日&#xff0c;中国台湾半导体封测龙头企业京元电子发布公告称&#xff0c;因为疫情影响&#xff0c;公司开始全面停产48小时。” 而事实上台湾疫情急剧恶化&#xff0c;停产48小时的确是“天真”了&#xff01; 半导体“最后一里路” 台媒称&#xff0c;京元电子从事的业…

为什么“鸿蒙”不是第二个“安卓”,如何看待Harmony OS里的Android痕迹?

​华为将在6月2日晚8点举办鸿蒙操作系统及华为全场景新品发布会。官方微博也在同一时间更名为Harmony OS&#xff0c;同时更新了鸿蒙操作系统的开机视频。——Harmony OS会带来哪些改变&#xff1f; “鸿蒙”走过的那些路 Harmony OS 历程 2012年&#xff0c;发布EMUI 1.0&…

路由器、交换机、服务器等网络设备常见故障及解决方法

在现代&#xff0c;网络设备已经是我们必不可少的重要工具&#xff0c;一旦出现问题会带来很大的影响。网络设备故障是指网络设备的配置原因而导致的网络异常或故障&#xff0c;常见的有路由器、光纤收发器、网卡、交换机、网线、服务器故障&#xff0c;那么网络设备故障怎么办…

Java ArrayDeque

介绍&#xff1a; Java中的ArrayDeque是实现Deque接口的类。 它是双端队列的基于数组的实现。 顾名思义&#xff0c;双端队列是允许我们在前端和后端添加或删除项目的队列。 在开始之前&#xff0c;让我们快速看一下ArrayDeque上的一些值得注意的点&#xff1a; ArrayDeque没…

什么是单片机

单片机也就是单片微型计算机的简称&#xff0c;由于单片机主要作用于控制领域&#xff0c;所以国际上也通常将单片机称之为微型控制器&#xff0c;单片机与微型计算机都是由CPU、存储器和输入/输出接口等组成的&#xff0c;但两者又有所不同&#xff0c;微型计算机和单片机的基…

光纤中继器的防雷及日常维护方法介绍

光纤中继器是一款中继器&#xff0c;支持以太网 10Mbps、100Mbps、155Mbps、622Mbps、1000Mbps&#xff08;1.25G&#xff09;的任何传输速率&#xff0c;产品广泛应用在光信号放大和光接口转换的通信场景中。今天&#xff0c;飞畅科技的小编来为大家详细介绍下光纤中继器的防雷…

单片机常用的几种通信协议

在单片机的应用中&#xff0c;通信协议是其中必不可少的一部分&#xff0c;上位机与下位机&#xff0c;单片机与单片机&#xff0c;单片机与外设模块之间的通信都需要通信协议实现信息交换和资源共享。由于设备之间不同的传输速率、电气特性、可靠性要求的不同&#xff0c;也产…

Wi-Fi和WLAN有什么区别

随着手机和电脑的不断普及&#xff0c;人们的生活也越来越离不开无线网络。 平常我们说的连WI-FI其实也就是连接无线网络&#xff0c;但是无论是手机还是电脑上&#xff0c;连接网络的那一栏显示的却是WLAN&#xff0c;而不是WI-FI。这两者难道不一样吗&#xff1f;它们有什么…

光纤中继器的安装调试

随着光通信领域的应用逐渐深入&#xff0c;国内通信厂商也逐渐开始自主研发光纤中继器产品&#xff0c;国产中继器的出现使得整个光纤中继器的成本大幅下降&#xff0c;此时&#xff0c;单模光缆和光纤中继器也逐步成熟&#xff0c;使得传输距离更远&#xff0c;效果更好&#…

【渝粤教育】国家开放大学2018年秋季 0688-22T老年精神障碍护理 参考试题

科目编号&#xff1a;0691 座位号&#xff1a; 2018-2019学年度第一学期期末考试 物理化学及实验试题 2019年1月 一、填空题&#xff08;每空4分&#xff0c;共40分&#xff09; 在质点平动运动中有&#xff1a;质量和牛顿第二定律&#xff0c;在刚体转动运动中与之相类似&a…