开式蓄冷罐与闭式蓄冷罐_一罐将其全部统治:Arquillian + Java 8

开式蓄冷罐与闭式蓄冷罐

arquillian_ui_success_256px 借助Java 8 ,已实现了许多新的语言改进,以简化开发人员的生活。 在我看来, Java 8的最大优点之一是,在某些情况下,已开发的代码看起来比使用以前的方法更漂亮,我指的是Lambdas和Method引用。 这篇文章不是要学习这些Java 8功能,而是如何在Arquillian框架中应用它们。

我已经检测到四个用例,其中可以在Arquillian中使用方法引用和lambda。 在这里您可以看到它们,当然,如果您找到其他任何一个,请随时与我们分享。

要使用Arquillian编写测试,您需要以编程方式(jar,war或ear)创建部署文件。 这是使用Shrinkwrap完成的。 部署文件有时会要求您在其上添加一些外部依赖项。 典型的示例是在创建WebArchive时 ,需要向WEB-INF / lib中添加一些依赖项。 在这种情况下,这很容易,因为WebArchive类具有一个名为addAsLibraries的方法,该方法基本上将给定的jar添加到库路径中。

但是,当您的部署文件是jar文件时,会发生什么情况? 然后,您需要使用merge方法合并 JavaArchive对象内的每个库。

private static JavaArchive mergeHibernate(JavaArchive javaArchive) {JavaArchive[] javaArchives = Maven.resolver().resolve("org.hibernate:hibernate-entitymanager:4.2.15.Final").withTransitivity().as(JavaArchive.class);for(JavaArchive hibernateDep: javaArchives) {javaArchive.merge(hibernateDep);}return javaArchive;
}

这是一种方法,但是对于Java 8 ,可以使用foreach函数和方法引用

private static JavaArchive mergeHibernate(JavaArchive javaArchive) {JavaArchive[] javaArchives = Maven.resolver().resolve("org.hibernate:hibernate-entitymanager:4.2.15.Final").withTransitivity().as(JavaArchive.class);Arrays.stream(javaArchives).forEach(javaArchive::merge);return javaArchive;
}

请注意,我们正在将Array转换为流,因此我们可以调用foreach函数。 在ShrinkWrap Resolver的 2.2.0版本中,您将能够以List的形式获取依赖项,因此无需进行任何转换就可以获取流。 下一个重点是我们正在使用方法引用功能来合并所有依赖项。 现在只需一行我们就可以合并所有依赖项。

Arquillian使用ShrinkWrap创建部署文件并在其中添加资源。 通过使用API​​提供的任何方法(如addaddClassaddAsManifestReource等) 添加这些资源。 这些方法可以接收Asset作为第一个参数。 Asset是一个仅包含一个称为openStream的方法的接口,该方法返回InputStream 。 资产用于设置将添加到部署文件内部的文件的内容。

例如:

archive.add(new StringAsset("My txt file"), "hello.txt");

ShrinkWrap带有一些已定义的资产,例如Url,String,Byte,Class等,但是有时您可能需要实现自己的Asset。

ShrinkWrap.create(JavaArchive.class).addAsManifestResource( new Asset() {public InputStream openStream() {return new CheckedInputStream(urlInputStream, crc32)}}, "persistence.xml");

在这种情况下,我们使用的是内部类,但是由于Asset类可以被视为功能接口(仅是一种抽象方法),因此可以使用Lambda来避免使用内部类。

非常简单,可读性强。

如果您使用Arquillian Drone或Arquillian Graphene,将使用一些WebDriver Selenium类来获取网页元素。 有时您需要验证HTML表格的列和HTML表格,在这种情况下,您可以通过在列和行上迭代很多样板代码来验证包含正确值的最终结果。

Java 8之前的代码如下所示:

List<WebElement> elements = session.findElements(xpath("//table/tbody/tr/td/span[@class='title']"));List<String> columnValues = new ArrayList<String>();
for(WebElement webElement : elements) {columnValues.add(webElement.getText());
}return columnValues;

但是在Java 8中 ,通过添加 API,代码变得更加容易和易读:

List<WebElement> elements = session.findElements(xpath("//table/tbody/tr/td/span[@class='title']"));
return elements.stream().map(WebElement::getText).collect(Collectors.toList());

如您所见,代码非常紧凑。 我们在这里首先要做的是获取列标题的所有Web元素,这里没有新闻。 但是随后流式 API开始发挥作用。 首先,我们通过调用stream方法从列表创建 。 然后,我们正在从列表中存在的所有WebElement中调用方法getText 。 最后,返回实际上是列标题所有行的内容列表的字符串列表。

请注意,在这种情况下,该代码比以前的代码更具可读性,更重要的是,您甚至可以创建并行流来获得多核处理器的所有功能。

如您所见, Java 8不仅可以用于业务代码中,还可以用于测试中。

翻译自: https://www.javacodegeeks.com/2014/12/one-jar-to-rule-them-all-arquillian-java-8.html

开式蓄冷罐与闭式蓄冷罐

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

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

相关文章

C 预处理指令

C 预处理指令C语言、C 语言的预处理器。用于在编译器处理程序之前预扫描源代码&#xff0c;完成头文件的包含, 宏扩展, 条件编译, 行控制&#xff08;line control&#xff09;等操作编译的四个阶段C语言标准规定&#xff0c;预处理是指前4个编译阶段&#xff08;phases of tra…

将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中

将HTML字符转换为DOM节点并动态添加到文档中将字符串动态转换为DOM节点&#xff0c;在开发中经常遇到&#xff0c;尤其在模板引擎中更是不可或缺的技术。字符串转换为DOM节点本身并不难&#xff0c;本篇文章主要涉及两个主题&#xff1a;1 字符串转换为HTML DOM节点的基本方法及…

通过Spring集成进行消息处理

Spring Integration提供了Spring框架的扩展&#xff0c;以支持著名的企业集成模式。 它在基于Spring的应用程序中启用轻量级消息传递&#xff0c;并支持与外部系统的集成。 Spring Integration的最重要目标之一是为构建可维护且可测试的企业集成解决方案提供一个简单的模型。 …

鸿蒙系统多会发布,华为官宣鸿蒙系统将发布,还将发布多款新品

华为今日官宣&#xff0c;6月2日20&#xff1a;00&#xff0c;将举行鸿蒙操作系统及华为全场景新品发布会。【1、鸿蒙OS2.0】本次发布会的重点将是推出华为今年的重点战略产品——鸿蒙系统。届时鸿蒙OS2.0正式版将陆续推送给手机用户。5月中旬时华为就先行推送了一波鸿蒙OS开发…

C语言结构体字节对齐

默认字节对齐C语言结构体字节对齐是老生常谈的问题了&#xff0c;也是高频面试题&#xff0c;现在我们来深入研究这个问题&#xff0c;彻底弄懂到底是怎么回事&#xff0c;给你一个结构体定义和平台机器位数就能手动计算出结构体占用字节数&#xff0c;现在我们不使用宏#pragma…

meetup_使用RxNetty访问Meetup的流API

meetup本文将涉及多个主题&#xff1a;响应式编程&#xff0c;HTTP&#xff0c;解析JSON以及与社交API集成。 完全在一个用例中&#xff1a;我们将通过非夸张的RxNetty库实时加载和处理新的metup.com事件&#xff0c;结合Netty框架的强大功能和RxJava库的灵活性。 Meetup提供了…

html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例

HTML5对于表单有着极大程度的优化&#xff0c;无论是语义&#xff0c;小部件&#xff0c;还是数据格式的验证。我猜你肯定会以浏览器兼容作为借口不愿意使用这些“新功能”&#xff0c;但这绝不应该成为使你停滞不前的原因&#xff0c;况且还有像Modernizr和ployfill这样的工具…

C语言经典题(1)

输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f;程序分析&#xff1a;以3月5日为例&#xff0c;应该先把前两个月的加起来&#xff0c;然后再加上5天即本年的第几天&#xff0c;特殊情况&#xff0c;闰年且输入月份大于3时需考虑多加一天#include int mai…

C语言面试-指针和引用的使用场景?

先解决两个疑问◆ 指针和引用的不同之处是什么&#xff1f;◆ 何时用用指针&#xff1f;何时用引用&#xff1f;指针和引用的不同之处看如下代码&#xff1a;指针是用来表示内存地址的&#xff0c;而指针这个整数正是被指向的变量地址。而引用就是给变量重新起了一个名字&#…

C语言指针变量与一维数组

数组元素之间的地址是相连的&#xff1b;变量地址绝对不是相连的&#xff0c;如果找到规律那也只是一个偶然的&#xff0c;不是必然的&#xff1b;1. 指针变量和一位数组下面对指针数组进行分析&#xff0c;index(小标是从0开始)&#xff0c;array数组是int类型&#xff0c;每一…

input发送a.jax_JAX-RS 2.0:服务器端处理管道

input发送a.jax这篇文章的灵感来自JAX-RS 2.0规范文档 &#xff08;附录C&#xff09;中的Processing Pipeline部分。 我喜欢它的原因在于它提供了JAX-RS中所有模块的漂亮快照-以准备好吞咽的胶囊形式&#xff01; 礼貌– JAX-RS 2.0规范文档 因此&#xff0c;我想到了使用此…

html 登录失败,qq音乐登录失败 QQ音乐总是显示登录失败是怎么回事

urlproc.exe是什么进程?没见过&#xff0c;请前辈们指点&#xff1f;造成QQ音乐登录不上现象的原因有如下三种可能&#xff1a; 一、木马病毒对QQ音乐的必要组件或文件进行破坏&#xff0c;导致QQ音乐登录失败&#xff0c;登陆不上的情况发生。 二、Windows系统防火墙(或其他安…

C 常对象成员

C 常对象成员在C 中&#xff0c;可以将对象的成员声明为const&#xff0c;包括常数据成员和常成员函数C 常数据成员 常数据成员的作用与一般常变量相似&#xff0c;用关键字const来声明常数据成员。常数据成员的值是不能改变的&#xff0c;只能通过构造函数的参数初始化表对常数…

娄底二中高考2021成绩查询,2021年娄底高考状元名单公布,娄底高考状元学校资料及最高分...

2019年高考已经落下帷幕&#xff0c;高考放榜时刻就要到来&#xff0c;每年的高考状元都会被各界高度关注&#xff0c;那么今年娄底高考状元花落谁家呢&#xff1f;娄底高考状元会给人带来惊喜吗&#xff0c;让我们一起期待2019年娄底高考状元的诞生。下面小编为给为梳理下历年…

C 常指针

C 指向对象的常指针C 定义指向对象的常指针的一般形式为 类名 * const指针变量名&#xff1b;也可以在定义指针变量时使之初始化在C 中&#xff0c;虽然指向对象的常指针变量的值不能改变&#xff0c;但可以改变其所指向对象的值&#xff0c;如果想将一个指针变量固定地与一个对…

microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...

随着现在互联网信息化发展的速度不断加快&#xff0c;企业邮箱作为企业之间信息传输的重要工具&#xff0c;其重要性不亚于企业网站&#xff0c;但市场上企业邮箱种类繁多&#xff0c;包含的功能也各不相同&#xff0c;稍有差异&#xff0c;你知道怎么去选择好企业邮箱吗&#…

Unity中Shader观察空间推导(在Shader中实现)

文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标&#xff0c;然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…

C 常引用

C 对象常引用在C 中&#xff0c;常用常指针和常引用作函数参数&#xff0c;既能保证数据安全&#xff0c;使数据不能被随意修改&#xff0c;在调用函数时又不必建立实参的拷贝。用常指针和常引用作函数参数&#xff0c;可以提高程序运行效率。在C 中&#xff0c;如果变量名和引…

mui hello html5 安装,HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试(示例代码)...

No1. 必须搭建java环境只需要最基础的java环境&#xff0c;也就是cmd下可以运行java和javac即可&#xff0c;具体教程请自行百度&#xff0c;都会有很详细的教程&#xff0c;这里不重点介绍。No2. 下载安装HBuilder下载完成后请将zip包解压缩到自定义的目录(windows)&#xf…

C 析构函数

C 析构函数概述C 析构函数是一个特殊的成员函数&#xff0c;作用与构造函数相反&#xff0c;它的名字是类名的前面加一个&#xff5e;符号&#xff0c;析构函数是与构造函数作用相反的函数&#xff0c;当对象的生命期结束时&#xff0c;会自动执行析构函数。C 执行析构函数的情…