java – 在非测试代码中使用Hamcrest匹配器是否可以接受

前端之家收集整理的这篇文章主要介绍了java – 在非测试代码中使用Hamcrest匹配器是否可以接受前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找到在非测试代码中使用Hamcrest匹配器的明确答案.我做了一些研究,并有一些对比的引用:

> Wikipedia的Hamcrest:

Hamcrest is a framework that assists writing software tests in the Java programming language. [snip] These matchers have uses in unit testing frameworks such as JUnit 07001 and jMock.

> Github的Hamcrest:

Hamcrest is a library of matchers,which can be combined in to create flexible expressions of intent in tests.

> Hamcrest于Google Code

Note: Hamcrest it is not a testing library: it just happens that matchers are very useful for testing.

就个人而言,我将Matchers与测试联系起来,所以我倾向于避免在测试之外使用它们.尽管如此,我认为没有任何限制可以阻止它们在测试范围之外使用.

这是否归结为个人偏好?

解决方法

到目前为止,我已经多次使用非测试代码中的Hamcrest.当我想在同一个对象上测试不同的条件时,我会使用它来获取由于什么原因导致哪些条件失败的报告.然后将单个条件表示为不同的对象,这些对象也具有一些其他好的效果.例如,检查应用程序配置可以产生哪些操作支持数据的结果.

我特别使用hamcrest进行此类任务的原因:

>它的目的是为了做到这一点(测试条件不仅在测试代码中完成)
>它不会带来额外的依赖
>众所周知,许多人已将其用于测试代码
>有一个易于使用和小API
>易于扩展,非常好地支持组合

最后归结为选择合适的工具.例如,Bean验证可用于执行相对类似的工作.需要做出深思熟虑的决定,这也包含了开发过程和环境的要求.

使用匹配器也是使用Tell,do not Ask原则的好方法.您可以将匹配器传递给方法,以指示您希望返回的返回值.如果有问题的对象与该匹配器不匹配,则可以立即抛出具有良好错误描述的异常.

此外,当比较匹配器的使用与Java 8的谓词时,匹配器的好处是能够提供描述,但缺点是它们本身不是功能接口.

猜你在找的Java相关文章