guava集合操作类的使用_使用Guava进行测试集合的实现

guava集合操作类的使用

我目前正在为LibFX添加一项新功能,为此我创建了一些类似于Java Collections Framework的自定义集合。 我一直在寻找可以与之对抗的测试,并很高兴发现Google的Guava包含了我所需要的:一个庞大的测试套件,可以验证JDK和Guava的所有集合接口实现的每个细节。

让我们快速浏览一下。

总览

这篇文章将首先展示如何设置项目,然后再着手进行实际测试。

我没有创建专门的示例,但是您可以看到我如何在LibFX中使用它 。

建立

为此,我们需要JUnit,Guava-Testlib和一些样板代码。

获取JUnit

如果您尚未在项目中使用JUnit,请在此处获取。 如果您使用Maven或Gradle:

Maven的依赖项信息

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

Gradle的依赖项信息

testCompile 'junit:junit:4.12'

获取番石榴

我们实际上需要的不是Guava本身,而是Guava-Testlib 。 您可以从中央存储库下载它, 该存储库还包含不同管理者的依赖项信息。

为了您的方便:

Maven的依赖项信息

<dependency><groupId>com.google.guava</groupId><artifactId>guava-testlib</artifactId><version>18.0</version><scope>test</scope>
</dependency>

Gradle的依赖项信息

testCompile 'com.google.guava:guava-testlib:18.0'

写一些样板

假设您要编写一个MySet和相应的MySetTest

通过JUnit-3.8.x方式,创建一个方法public static Test suite();. JUnit查找此方法,并使用它来识别将为该类运行的所有测试。 在该方法内,创建一个TestSuite并添加我们将进一步编写的测试:

MySetTest中的样板

public class MySetTest {public static Test suite() {return new MySetTest().allTests();}public Test allTests() {TestSuite suite =new TestSuite("package.name.of.MySetTest");suite.addTest(testForOneToWayUseMySet());suite.addTest(testForAnotherWayToUseMySet());return suite;}}

(我没有尝试使用JUnit 4的注释来执行此操作。如果您这样做了,请ping通,然后将其包含在此处。)

放置好样板后,您可以使用JUnit运行此类,例如从IDE内部或CI服务器上运行此类。

测试您的实施

现在已经完成了,我们可以开始为实现实际创建测试了。 或者,更准确地说,告诉番石榴如何为我们做到这一点。 这是一个分为两部分的过程:一个为集合中的元素和被测单元创建一个生成器,另一个使用Guava的测试套件构建器中的一个来创建针对实现而定制的全面测试集。

我们将继续测试Set的实现。 在下面,我们将查看哪些其他接口测试套件可用。

元素生成器和被测单元

测试套件构建器要求您允许在集合中创建样本元素并实例化集合。 为此,您必须实现TestSetGenerator<E> (其中E是元素的类型)。

这很简单, order(List<E>)是可能需要考虑的唯一方法。 请注意,与文档相反,即使未报告CollectionFeature.KNOWN_ORDER ,testlib(18.0)的当前版本也确实调用了此方法(有关功能的详细信息,请参见下文)。 在我的情况下 ,只需返回插入顺序即可。

测试套件生成器

现在,这才是真正的魔术发生。 您从上方获取生成器,将其传递给正确的测试套件生成器,指定您的集合具有哪些功能,它将创建定制的全面测试套件:

使用“ SetTestSuiteBuilder”创建测试

public Test testForOneToWayUseMySet() {return SetTestSuiteBuilder.using(new MySetGenerator()).named("one way to use MySet").withFeatures(CollectionSize.ANY,CollectionFeature.ALLOWS_NULL_VALUES,CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION,CollectionFeature.SUPPORTS_ADD,CollectionFeature.SUPPORTS_ITERATOR_REMOVE,CollectionFeature.SUPPORTS_REMOVE,).createTestSuite();
}

特征

指定正确的功能很重要。 查看两个枚举CollectionSizeCollectionFeatures以查看存在哪些可能性来描述集合的行为。

请注意,创建的测试会同时验证功能! 例如,如果ALLOWS_NULL_VALUES ,构建器将生成测试,以验证向集合添加null会抛出NullPointerException

抑制测试

通过在构建器上调用suppressing ,您可以指定将不会运行的测试方法。 当这些功能不足以精确指定行为时,它似乎是最后的选择。 我没有使用它。

设置与拆卸

如果必须在每次测试之前或之后运行代码,则可以将其作为Runnable分别withTearDownwithSetUpwithTearDown (都可以在构建器上调用)。

可用的测试套件

当然,您也可以为其他接口生成测试套件。 乍一看就产生了以下可能性:

Java的集合:

  • 采集
  • 迭代器
  • 清单
  • 地图
  • 导航地图
  • 导航集
  • 队列
  • SortedMap
  • SortedSet

番石榴的收藏:

  • 双图
  • ListMultimap
  • 多图
  • 多集
  • SetMultimap
  • SortedMultiset
  • SortedSetMultimap

* TestSuiteBuilder进行类型搜索(请注意通配符)会产生一些其他生成器。 我没有对其进行调查,但是有可能将其用于其他情况下的测试。

为了使用它们,只需实现相应的Test...Generator并将其交给相应的...TestSuiteBuilder

反射

我们已经看到了如何使用Guava的Testlib测试集合的实现:如何将其和JUnit包含在我们的项目中,运行它所需的样板以及对生成器和测试套件生成器的概述。 后者是发生所有魔术的地方,它可以创建全面的测试,以适合我们对实现及其功能的描述。

翻译自: https://www.javacodegeeks.com/2015/03/test-collection-implementations-with-guava.html

guava集合操作类的使用

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

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

相关文章

如何正确认识C语言在当今编程领域的地位

点击上方蓝字关注我&#xff0c;了解更多咨询一、什么是语言&#xff0c;什么是C语言&#xff0c;有什么区别与联系&#xff1f;一提到语言这个词&#xff0c;人们自然想到的是像英语、汉语等这样的自然语言&#xff0c;因为它是人和人相互交流信息不可缺少的工具。大家听到我们…

三十学计算机编程,计算机学习三宗罪3——计算机达人成长之路(25)

6、论道(四)计算机学习三宗罪之偏科上文说道木鹏飞声明计算机学习的第二宗罪是学习浮躁&#xff0c;只流于表面而不肯深入底层学习&#xff0c;并指出了编程的三重境界。木鸿飞则继续咨询第三宗罪。“第三宗罪就是偏科。具体来讲有两种表现&#xff0c;一是动手编程和理论学习二…

fx 线程 弹窗_JFXPanel和FX Platform线程陷阱

fx 线程 弹窗JFXPanel是一个组件&#xff0c;可将JavaFX内容嵌入到&#xff08;旧版;-)&#xff09;Swing应用程序中。 基本上&#xff0c;这使合并两个对象变得非常容易&#xff0c;但是要掌握一些陷阱&#xff1a;两个UI工具箱都是单线程的&#xff08;Swing&#xff1a;EDT …

计算机操作系统的新技术新知识,计算机操作系统教程:核心与设计原理

计算机操作系统教程&#xff1a;核心与设计原理语音编辑锁定讨论上传视频《计算机操作系统教程——核心与设计原理》是2007年清华大学出版社出版的图书&#xff0c;作者是范策、许宪成、黄红桃。书 名计算机操作系统教程——核心与设计原理作 者范策许宪成黄红桃等ISBN97…

理解好内存管理,C语言就不难学了

点击上方蓝字关注我&#xff0c;了解更多咨询任何程序运行起来都需要分配内存空间存放该进程的资源信息的&#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同&#xff0c;不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式…

智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招

对于大学里喜欢上网的小伙伴们&#xff0c;一旦到了断网的时间段&#xff0c;非常的难受&#xff0c;今天小白教大家一招&#xff0c;看到最后&#xff01;&#xff01;以后断网再也不怕啦&#xff0c;熬夜伤身&#xff0c;慎用&#xff01;&#xff01;相信很多同学都知道了手…

netty socket_Netty:另一种Web(Socket)服务器

netty socket如今&#xff0c; Netty已用于Internet上的各种应用程序中&#xff0c;以处理数千个&#xff08;如果不是上百万个&#xff09;聊天对话&#xff0c;包括Minecraft &#xff0c; Twitter和许多其他应用程序在内的多人游戏。 但是&#xff0c;它并没有深入到开发企业…

计算机用户guest无法删除吗,Win7怎么删除Guest账户?

原标题&#xff1a;Win7怎么删除Guest账户&#xff1f;我们都知道&#xff0c;访客帐户是系统附带的帐户。通常&#xff0c;用户给出了访客帐户。为了确保系统的安全性&#xff0c;它是一个限制帐户。使用客人帐户&#xff0c;您有权临时使用我们的计算机。但是&#xff0c;一些…

为什么C语言不会过时?

点击上方蓝字关注我&#xff0c;了解更多咨询评价任何一门编程语言&#xff0c;都是招人骂的。永远是这样。就像是春寒料峭的季节&#xff0c; 街上穿棉袄和穿单衣的擦肩而过&#xff0c;双方一定是同时在心里出现了两个字&#xff1a;“傻逼&#xff01;”这个在心理学上有个专…

机械装备计算机控制技术考试题,武汉理工大学机电工程学院研究生课程考试试题(肖峻)...

武汉理工大学机电工程学院研究生课程考试试题课程名称 机械装备计算机控制技术Ⅱ一&#xff0e;简答题(合计30分&#xff0c;每题10分)1、计算机控制系统按系统结构和控制功能分为哪几种&#xff1f;分别描述其特点。2、简述几种常用的数字滤波方法及其优、缺点。如何选用各种数…

java 性能 优化_Java十大简单性能优化

java 性能 优化关于“ web scale ”这个流行词有很多炒作&#xff0c;人们花了很多时间来重新组织他们的应用程序体系结构&#xff0c;以使其系统“规模化”。 但是什么是扩展&#xff0c;我们如何确保可以扩展&#xff1f; 缩放的不同方面 上面提到的炒作主要是关于扩展负载…

cx_oracle写日志信息_看日志痛苦——可能是你方法不对

看日志&#xff0c;是研发的日常工作&#xff0c;相信你已经从各种报错日志中查出许多BUG&#xff0c;但也被冗长、复杂的日志困扰过无数次。在日常工作中&#xff0c;我也经常痛苦于看日志&#xff0c;一般是这些日志长得面目狰狞&#xff1a;日志文件太大&#xff0c;打开都很…

在Swift中使用C语言的指针

点击上方蓝字关注我&#xff0c;了解更多咨询Objective-C和C语言经常需要使用到指针。Swift中的数据类型由于良好的设计&#xff0c;使其可以和基于指针的C语言API无缝混用。同时 Swift也可以自动处理大多数将指针作为参数的情况。在这篇文章里&#xff0c;我们可以看到在Swift…

计算机四级数据库分值分布,计算机四级数据库工程师考试成绩查询注意事项

计算机四级数据库工程师考试成绩查询注意事项为帮助广大考生更好的了解有关计算机四级数据库工程师考试的相关信息&#xff0c;唯学小编特整理了计算机四级数据库工程师考试成绩查询注意事项&#xff0c;望考生能够认真查看。同时唯学小编特别提醒想要参加数据库工程师考试的考…

android 音频合成_【Android工具】用手机测量噪声的工具软件,噪声仪分贝计,量化噪声声音工具...

今天分享一个通过手机麦克风测量环境噪声的工具——声级计(噪声仪)。本来是要分享另一款的&#xff0c;但下载下来的是xapk的安装包&#xff0c;太麻烦了&#xff0c;功能差不多&#xff0c;大家就先用这款吧&#xff0c;有条件的朋友可以去play自己下载。软件名称&#xff1a;…

cassandra_Apache Cassandra和低延迟应用程序

cassandra介绍 多年来&#xff0c; Grid Dynamics拥有许多与NoSQL相关的项目&#xff0c;尤其是Apache Cassandra。 在这篇文章中&#xff0c;我们要讨论一个给我们带来挑战的项目&#xff0c;而我们在该项目中试图回答的问题今天也仍然适用。 数字营销和在线广告在2012年很受…

浅析五种C语言内存分配的方法及区别

点击上方蓝字关注我&#xff0c;了解更多咨询在C语言中&#xff0c;内存分成5个区&#xff0c;他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清楚的变量的存储区。里面的变量通常…

认识计算机听课记录20篇,【中学信息技术听课记录】 信息技术听课记录15篇及评析_初中信息技术听课记录_高中信息技术听课记录20篇_东城教研...

中学信息技术听课记录关于中学信息技术听课记录&#xff0c;东城教研小编了解到&#xff1a;听课记录表(一)实习学校&#xff1a;_xxx九年制学校__ 实践基地任课教师:xxx 班 级 八、一 时 间 2014.12.22 授课人 xxx 授课题目 软件的下载与安装 类 型 新授 教学过程 内 容 说 明…

电脑装机完没有efi_电脑装机如何选内存?看完这篇就全懂了

电脑运行太慢&#xff0c;很多小伙伴第一想到的就是加个内存&#xff0c;没错&#xff0c;一般主板上预留了两个以上的内存插槽&#xff0c;加内存是升级电脑最划算的一个硬件升级&#xff0c;其次&#xff0c;可能是加个固态硬盘来提速。今天电脑学习小编教你如何选择适合自己…

数据库 ogm_带有Hibernate OGM的NoSQL –第二部分:查询数据

数据库 ogmHibernate OGM的第一个最终版本发布于 1月底&#xff0c;团队一直在忙于制作一系列教程式博客&#xff0c;使您有机会轻松地从Hibernate OGM重新开始。 第一部分是关于设置和保留您的第一个实体 。 在第二部分中&#xff0c;您将学习如何查询数据。 Hibernate OGM将使…