在通过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

在JUnit中超越核心Hamcrest相关推荐

  1. maven mockito_如何:测试Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中的依赖项

    maven mockito 对于当今的大多数Java项目而言,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. ...

  2. 如何:在Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中测试依赖项

    对于当今的大多数Java项目,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. 一切都始于JUnit Mave ...

  3. junit:junit_处理JUnit中异常的另一种方法:catch-exception

    junit:junit JUnit中有许多处理异常的方法 (JUnit中有3种处理异常的方法.选择哪一种? JUnit ExpectedException规则:超越了基础 ). 在这篇文章中,我将介绍 ...

  4. 处理JUnit中异常的另一种方法:catch-exception

    JUnit中有许多处理异常的方法 (JUnit中有3种处理异常的方法.选择哪一种呢? JUnit ExpectedException规则:超越了基础 ). 在本文中,我将介绍建议尝试的catch-ex ...

  5. JUnit的内置Hamcrest Core Matcher支持

    在用JUnit和Hamcrest改进assertEquals的文章中,我简要讨论了Hamcrest " 核心 "匹配器与JUnit的现代版本"结合"在一起的情况 ...

  6. 2021年大数据ELK(五):Elasticsearch中的核心概念

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...

  7. 理解Lucene索引与搜索过程中的核心类

    理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.Directory.Analyzer.Document.Field 1.IndexWriter IndexWriter ...

  8. 可持续农业生态系统中的核心微生物组

    处于生态系统退化和全球变化的时代,农业生态系统中微生物功能的最大化已经成为未来全球农业的首要条件.农业生态系统由植物与体量巨大的微生物组(Microbiome)交错的相互作用网络(图1)构成,是最复杂 ...

  9. spring中基础核心接口总结

    spring中基础核心接口总结 理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口 重要的实现类有: XmlBean ...

最新文章

  1. nemanja AJAX,通过AJAX发送空值 - ASP.NET MVC
  2. R 语言数据读取与存储
  3. 微信小程序|开发实战篇之十二---order页面
  4. 软件测试总结--01基础
  5. Jmeter测试脚本编写详解(配详图)
  6. 摘:Windows系统内存计数器理解解析_备忘录_51Testing软件测试网...
  7. 深入浅出了解OCR识别票据原理
  8. 计算机多媒体培训总结,教师多媒体培训心得体会3篇
  9. 线程学习记录-锁原理与对象头
  10. 8、C语言printf函数与scanf函数
  11. Python的学习笔记案例8--空气质量指数计算9.0
  12. VS 2022 C++ 自定义头文件示例
  13. 异构服务器 微服务_微服务架构是什么?
  14. 用户生命周期(User Lifetime)
  15. Matplotlib_Study01
  16. 常用电平标准(TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232
  17. 区块链:分布式系统核心技术
  18. 用计算机模拟掷骰子实验,实验一古典概型及其模拟(6页)-原创力文档
  19. 工作流之activiti6新手上路
  20. 蓝牙 - 可连接设备数量

热门文章

  1. nginx停止,平滑重启命令
  2. selenium 4_Selenium4 Alpha –期望什么?
  3. recorder_将Java Flight Recorder与OpenJDK 11一起使用
  4. java 换行 运算符格式_Java代码样式运算符换行格式
  5. java登录界面命令_Java命令行界面(第11部分):CmdLn
  6. Spring集成基础知识
  7. jmh 基准测试_JMH:如何设置和运行JMH基准
  8. java 泛型嵌套泛型_Java泛型简介–第6部分
  9. javafx swing_JavaFX技巧9:请勿混用Swing / JavaFX
  10. Kogito人机规则-第1部分:进一步解决流口水