一罐将其全部统治: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表的列,在这种情况下,您可能需要通过在列和行上迭代许多样板代码来验证包含正确值的样例代码。

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/360957.shtml

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

相关文章

Gentoo使用sudo

安装app-admin/sudo包 emerge sudo 设置环境变量EDITOR echo EDITOR\"/usr/bin/vim\" >/etc/env.d/99editor env-update 然后注销重新登陆编辑sudo配置文件/etc/sudoer&#xff0c;启用wheel组特权&#xff0c;/etc/sudoer不能用编辑器直接编辑&#xff0c;只能使…

uni-app引入阿里巴巴矢量库图标后,顶部导航栏显示小方块

引入阿里巴巴矢量图标库 首先在阿里巴巴创建项目&#xff0c;拥有图标 具体引入方法参考&#xff1a; [https://blog.csdn.net/Dream_Weave/article/details/88550978?depth_1-utm_sourcedistribute.pc_relevant.none-task&utm_sourcedistribute.pc_relevant.none-task]在…

使用Spring Integration进行消息处理

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

mysql中的字段类型

Mysql中的字段类型 MySQL支持大量的列类型&#xff0c;它可以被分为3类&#xff1a;数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述&#xff0c;并且总结每个列类型的存储需求&#xff0c;然后提供每个类中的类型性质的更详细的描述。概述有意…

js 编码

编码 let url encodeURIComponent(this.url);

使用RxNetty访问Meetup的流API

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

SQL Server 2005/2008 导入导出数据常见报错

数据库导入导出时总失败&#xff0c;错误信息如下&#xff1a; 正在验证 (错误) 消息 错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据。 (SQL Server 导入和导出向导) 错误 0xc0202045: 数据流任务 1: 验证列元数据失败。 (SQL Server 导入和导出向导) 错…

js、react对象名和对象属性赋值

const resValue {}; resValue[standards${standardsNumber}] ""; Console.log(:test"&#xff0c;resValue )//

TIBCO产品的微服务和DevOps

如今&#xff0c;每个人都在谈论微服务。 您可以在数百篇文章和博客文章中读到很多有关微服务的信息。 马丁福勒 &#xff08; Martin Fowler &#xff09;的文章是一个很好的起点&#xff0c;该文章引发了有关这种新架构概念的大量讨论。 另一个很棒的资源是独立于供应商的分…

三层结构

三层结构&#xff1a; 1.UI层&#xff0c;表示层&#xff1b;负责界面&#xff0c;也就是我们看到的前台的东西&#xff0c;最直观的东西都在这里实现&#xff1b; 2.BLL层&#xff0c;业务逻辑层&#xff0c;负责软件的业务逻辑&#xff0c;逻辑代码在这里实现&#xff1b; 3.…

antd listView中onEndReached()失效

antd listView中useBodyScrolltrue会导致onEndReached&#xff08;&#xff09;失效

使用Degraph管理软件包依赖关系

软件开发领域的很大一部分是使系统的复杂性尽可能地低。 但是复杂性到底是什么&#xff1f; 虽然确切的语义有很大不同&#xff0c;但取决于您询问的人&#xff0c;大多数人可能都认为这与系统中部件的数量及其交互有很大关系。 考虑太空中的大理石&#xff0c;即行星&#xf…

[转载] 应急管理体系及其业务流程研究

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/03/04/2942337.html

div中直接绑定富文本值

<div dangerouslySetInnerHTML{{ __html: ${currentGoods.ShortDescription} }}/>

[转载]创建数据库与完成数据添删改查--第一种写法

<?xml version"1.0" encoding"utf-8"?><manifest xmlns:android"http://schemas.android.com/apk/res/android"package"cn.itcast.db"android:versionCode"1"android:versionName"1.0" ><uses-s…

微信公众号网页开发:播放视频,在列表中滑动会脱离文档流

项目场景&#xff1a; antd移动端端开发微信公众号移动端网页开发 问题描述&#xff1a; video-react有问题&#xff0c;在跑马灯中第一次白屏&#xff0c;在列表中滑动会脱离文档流 原因分析&#xff1a; 未知 解决方案&#xff1a; 直接上代码 <videocontrols"c…

如何在没有Springockito的情况下模拟Spring bean

我在Spring工作了几年。 但是我总是对XML配置变得多么混乱感到沮丧。 随着各种注释和Java配置可能性的出现&#xff0c;我开始喜欢使用Spring进行编程。 这就是为什么我强烈使用Java配置的原因。 我认为&#xff0c;仅当您需要可视化Spring Integration或Spring Batch流时&…

WP8手机上的图标

一直不清楚WP8手机上两个圆的标志是什么意思&#xff0c;今天看到下面的链接&#xff0c;终于搞明白了&#xff0c;原来是打开了GPS就有。 http://www.windowsphone.com/en-us/how-to/wp8/basics/what-do-the-icons-on-my-phone-mean 转载于:https://www.cnblogs.com/wonderow/…

JS保留两位小数

toFixed&#xff08;2&#xff09;

OpenShift上的Java EE工作流(技术提示#64)

该网络研讨会展示了如何使用WildFly &#xff0c; JBoss Tools &#xff0c; Forge &#xff0c; Arquillian和OpenShift在OpenShift上创建Java EE工作流。 具体来说&#xff0c;它谈论&#xff1a; 如何使用JBoss Developer Studio轻松开发Java EE应用程序并将其直接部署到Op…