在JUnit中超越核心Hamcrest

在通过JUnit和Hamcrest改进对assertEquals的文章中,我介绍了将Hamcrest与JUnit一起使用 。 然后,我查看了JUnit的内置Hamcrest Core Matcher支持 。 在本文中,我将介绍如何将Hamcrest的非核心匹配器与JUnit一起应用。 这些非核心匹配器默认情况下不包含在JUnit中,但可以通过在类路径中包含Hamcrest JAR来使用。
尽管JUnit包含Hamcrest核心匹配器 ,如果只想使用核心匹配器,则使它们更易于使用,但这种包含可能使非核心匹配器的使用更加困难 ,这是一个众所周知的问题 。
由于JUnit不包含非核心Hamcrest匹配器,因此需要下载 Hamcrest JAR。 对于本文中的示例,我正在使用hamcrest-all-1.2.jar 。
下一个屏幕快照显示了将所有繁琐的JAR与常规JUnit库(在本例中为NetBeans 7.2 beta提供的JUnit 4.10)组合在一起时遇到的问题。 如屏幕快照所示,在hamcrest-all-1.2.jar之前,当junit-4.10.jar包含在NetBeans库中时,先前的工作代码(来自我的上 hamcrest-all-1.2.jar 文章 )会中断。 NetBeans和命令行编译器均在此屏幕快照中显示此损坏。
切换测试库的顺序,以便首先列出Hamcrest库,然后列出其后的JUnit JAR,这会使编译器中断测试代码。 这显示在下一个屏幕快照中。
尽管切换依赖库的顺序,以便在JUnit JAR确实防止构建问题之前就包含Hamcrest JAR,但这通常不是令人满意的方法。 这种方法对于长期可维护性来说太脆弱了。 幸运的是,JUnit直接支持一种更好的方法来处理此问题。
可以下载特殊的无Hamcrest的JUnit JAR。 下一个屏幕快照显示了本示例中使用的快照: junit-dep-4.10.jar 。 JAR名称中的-dep是不包含Hamcrest的线索。 下载页面上JAR旁边的符号(下图显示了屏幕快照)也指出了这一点(“无障碍的JAR”)。
借助JUnit JAR的无Hamcrest“ dep”版本,我可以在与Hamcrest JAR相关的任何时候将其包含在测试库中,并且仍然可以构建测试代码。 这比依赖于特定顺序的测试库更有利。 下一个图像显示了NetBeans的屏幕快照,并且即使首先列出了JUnit JAR,命令行构建仍然成功。
使用适当的库(JUnit-dep JAR和Hamcrest“ all” JAR)后,所有Hamcrest的匹配器都可以与基于JUnit的测试一起使用。 除了与JUnit捆绑在一起的核心匹配之外,Hamcrest还提供了许多匹配器 。 了解可用的其他匹配器的一种方法是查看Hamcrest JAR中的类。 以下是对Hamcrest JAR运行jar tvf命令并删除许多条目以留下一些最有趣的条目的输出。 “核心”匹配器倾向于基于“核心”程序包中的类,而非核心匹配器倾向于基于所有其他程序包中其名称中没有“核心”的类。
4029 Thu May 21 23:21:20 MDT 2009 org/hamcrest/core /AllOf.java3592 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /AnyOf.java1774 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /CombinableMatcher.java1754 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /DescribedAs.java1104 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /Every.java2088 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /Is.java1094 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsAnything.java2538 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsCollectionContaining.java1862 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsEqual.java2882 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsInstanceOf.java1175 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsNot.java1230 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsNull.java960 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /IsSame.java675 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /StringContains.java667 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /StringEndsWith.java678 Thu May 21 23:21:20 MDT 2009 org/hamcrest/ core /StringStartsWith.java2557 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArray.java1805 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContaining.java1883 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContainingInAnyOrder.java1765 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayContainingInOrder.java1388 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsArrayWithSize.java1296 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsCollectionWithSize.java812 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsEmptyCollection.java866 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsEmptyIterable.java1086 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIn.java3426 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableContainingInAnyOrder.java3479 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableContainingInOrder.java993 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsIterableWithSize.java1899 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContaining.java1493 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContainingKey.java1421 Thu May 21 23:21:20 MDT 2009 org/hamcrest/collection/IsMapContainingValue.java1380 Thu May 21 23:21:20 MDT 2009 org/hamcrest/number/IsCloseTo.java2878 Thu May 21 23:21:20 MDT 2009 org/hamcrest/number/OrderingComparison.java1082 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/HasToString.java918 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/IsCompatibleType.java2080 Thu May 21 23:21:20 MDT 2009 org/hamcrest/object/IsEventFrom.java1164 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEmptyString.java1389 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEqualIgnoringCase.java2058 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/IsEqualIgnoringWhiteSpace.java1300 Thu May 21 23:21:20 MDT 2009 org/hamcrest/text/StringContainsInOrder.java4296 Thu May 21 23:21:20 MDT 2009 org/hamcrest/xml/HasXPath.java
如果希望与JUnit一起使用的Hamcrest匹配器超出“核心”匹配器,则JUnit提供的没有自动内置的Hamcrest的JAR(“ dep” JAR)使开发人员可以更仔细地构建其类路径。

参考:来自我们的JCG合作伙伴 Dustin Marx 在JUnit中超越核心Hamcrest,来自Inspired by Actual Events博客。


翻译自: https://www.javacodegeeks.com/2012/06/moving-beyond-core-hamcrest-in-junit.html

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

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

相关文章

4pics1word android,4 Pics 1 Word

4 Pics 1 Word是一款非常有意思的看图猜词游戏,这款游戏中会给我们四张图片,玩家需要通过图片给出的信息来猜出是哪个词,看西西的介绍你可能以为这是一款千篇一律的看图猜词游戏,不过这里猜的不是中文而是英语单词。4 Pics 1 Word…

页面内锚点定位及跳转方法总结

接着上一篇&#xff0c;其实是一个功能&#xff0c;本来感觉挺简单的一个问题&#xff0c;没想到遇到两个坎儿&#xff0c;无语。。。 上一篇是关于scroll事件绑定的问题&#xff0c;这一篇的问题是&#xff1a;点击锚点跳转到相应DIV的问题。 最简单的方法是锚点用<a>标…

基于android的水稻叶片特征测量系统,基于Android的水稻叶片特征参数测量系统

基于Android的水稻叶片特征参数测量系统路艳1&#xff0c;肖志勇2&#xff0c;3&#xff0c;杨红云2&#xff0c;3*&#xff0c;周琼1&#xff0c;孙玉婷1【摘要】摘要&#xff1a;【目的】提供基于Android的水稻叶片特征参数测量系统&#xff0c;为农学研究提供精准数据。【方…

JAVA学习绘图颜色及其笔画属性设置字体显示文字

package com.graphics;import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date;import javax.swing.*;/*** * author biexiansheng**/ public class DrawString extends JFrame{private Shape rect;//矩形对象private Font font;//字体对象private Date …

lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)

题目链接&#xff1a;http://lightoj.com/volume_showproblem.php?problem1044 题意&#xff1a;求给出的字符串最少能分成多少串回文串。 一般会想到用区间dp暴力3个for但是这里的数据有1000&#xff0c;3个for肯定超时的。 但是这题只是判断回文串有多少个所以可以先预处理一…

对JavaFX Mobile应用程序进行性能分析

注意&#xff1a;本文最初发表于2009年&#xff0c;仅供参考。 请查阅我们其余的JavaFX文章 。 对于每个JavaFX Mobile应用程序开发人员来说&#xff0c;今天都是美好的一天。 你想知道为什么吗&#xff1f; 因为JavaME SDK 3.0已发布。 根据我午休时听到的消息&#xff0c;这是…

第六天20160810

a) 形参与实参 一、 形参为基本数据类型&#xff1a;形参改变&#xff0c;实参不变。 二、 形参为引用数据类型&#xff1a;形参改变&#xff0c;实参通常都会改变。 b) 可变长参数&#xff1a;JDK1.5开始出现 一、可变长参数只能用于…

android原生系统开发板,安卓学习必备开发板-Rayeager PX2

由谷歌主导并推动的移动终端操作系统Android&#xff0c;由于其开源开放的特性&#xff0c;自发布之日起便受到全球各大IT厂商的欢迎。在各厂商的热情推动下&#xff0c;基于Android系统的手机、平板、智能手表等各类产品层出不穷&#xff0c;迅速普及到人们的日常生活&#xf…

变量类型取值范围

ascii&#xff1a;Oct Dec Hex Char──────────────────────────101 65 41 A102 66 42 B103 67 43 C141 97 61 a142 98 62 b143 99 63 c 取值范围&#xff1a;-1 ~ 0xFFFFFFFF ~ 全1127 ~ 0x7F255 ~ 0xFF ~ 11111111 char -128 ~ 127 …

热点中的即时编译器(JIT)

即时编译器&#xff08;JIT&#xff09;的概念以及更广泛的自适应优化是除Java&#xff08;.Net&#xff0c;Lua&#xff0c;JRuby&#xff09;之外的许多语言中众所周知的概念。 为了解释什么是JIT编译器&#xff0c;我想先定义一个编译器概念。 根据维基百科&#xff0c;编译…

3.30下午

在另一台机子安装VMware workstation12和win8服务器 总是秘钥不行 很烦转载于:https://www.cnblogs.com/bgd140206314/p/6647159.html

Java并发性-任务反馈

从我 上一篇 关于java.util.concurrent包的 文章 的结尾处 摘下来 &#xff0c;这很有趣&#xff0c;有时甚至必须在并发任务启动后从它们那里获得反馈。 例如&#xff0c;假设一个应用程序必须发送电子邮件批处理&#xff0c;除了使用多线程机制外&#xff0c;您还想知道成功发…

JS中的函数(二):函数参数(你可能不知道的参数传递)

前言&#xff1a; 函数分为有参有返回值&#xff0c;有参无返回值&#xff0c;无参无返回值&#xff0c;无参有返回值&#xff1b;那么对于无参数的函数你想使用函数的调用怎么办呢&#xff1f;如果你想封装一个代码&#xff0c;实现多种功能&#xff0c;但是形参大于实参或者实…

jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法

本文实例讲述了jQuery过滤HTML标签并高亮显示关键字的方法。分享给大家供大家参考。具体如下&#xff1a;jQuery实现网页关键字过滤效果&#xff0c;将需要过滤的文字定义在JavaScript中&#xff0c;可定义多个&#xff0c;不过要修改JS代码为数组&#xff0c;这样可过滤出多个…

Jmeter参数化 CSV Data Set Config界面说明

Filename&#xff1a;指保存信息的文件目录&#xff0c;可以相对或者绝对路径&#xff0c;相对路径从Jmeter 的启动目录(***/bin)路径。 File Encoding:文件编码&#xff0c;默认为ANSI&#xff0c;建议设置为utf-8&#xff0c;防止遇见乱码情况。 Variable Names&#xff1a;参…

java.lang.NoClassDefFoundError:如何解决–第1部分

线程“ main”中的异常java.lang.NoClassDefFoundError是开发Java EE企业版或独立Java应用程序时可能会遇到的常见难题之一。 根本原因分析和解决过程的复杂性主要取决于Java EE中间件环境的大小。 特别是考虑到各种Java EE应用程序中存在大量的ClassLoader。 我向您建议的一系…

android 日期国际化,Flutter 日期时间选择类控件及国际化

注意&#xff1a;无特殊说明&#xff0c;Flutter版本及Dart版本如下&#xff1a;Flutter版本&#xff1a; 1.12.13hotfix.5Dart版本&#xff1a; 2.7.0DatePickerFlutter并没有DatePicker这个控件&#xff0c;需要使用showDatePicker方法弹出日期选择控件&#xff0c;基本用法如…

英式英语 vs 美式英语

0. 常见不同 日期的表达&#xff1a; 美国&#xff1a;月日年&#xff1b;英国&#xff1a;日月年&#xff1b;1. 发音 schedule&#xff0c;美 [‘skɛdʒul]&#xff0c;英 [ˈʃɛdjuːl]pecan&#xff0c;山核桃&#xff0c;英 [‘piːk(ə)n;]&#xff0c;美 [pɪ’kɑn]a…

Java多线程:线程间通信之volatile与sychronized

由前文Java内存模型我们熟悉了Java的内存工作模式和线程间的交互规范&#xff0c;本篇从应用层面讲解Java线程间通信。 Java为线程间通信提供了三个相关的关键字volatile, synchronized和final。对于final&#xff0c;我们在博文Java中static关键字和final关键字中已经介绍。 1…

避免Java中的空指针异常

空指针异常是Java中最常见&#xff0c;最烦人的异常。 在这篇文章中&#xff0c;我想避免这种不希望的异常。 首先让我们创建引发空指针异常的示例 private Boolean isFinished(String status) { if (status.equalsIgnoreCase("Finish")) { return Boolean.TRUE; …