我试图找到在非测试代码中使用Hamcrest匹配器的明确答案。我做了一些研究,并有一些对比的引用:
Wikipedia上的Hamcrest:
Hamcrest是一个框架,帮助编写Java编程语言中的软件测试。 [snip]这些匹配器在单元测试框架中有用,例如JUnit 2和jMock。
Github上的Hamcrest:
Hamcrest是一个匹配器库,可以结合使用以在测试中创建灵活的意图表达。
Google Code上的Hamcrest:
注意: Hamcrest它不是测试库:只是匹配器对测试非常有用。
就个人而言,我将Matchers与测试联系起来,所以我倾向于避免在测试之外使用它们。尽管如此,我认为没有任何限制可以阻止它们在测试范围之外使用。
这是否归结为个人偏好?
答案 0 :(得分:6)
到目前为止,我已经多次在非测试代码中使用过Hamcrest。当我想在同一个对象上测试不同的条件时,我会使用它来获取由于什么原因导致哪些条件失败的报告。然后将单个条件表示为不同的对象,这些对象也具有一些其他好的效果。例如,检查应用程序配置可以产生哪些操作支持数据的结果。
我特别使用hamcrest进行此类任务的原因:
最后归结为选择合适的工具。例如,Bean验证可用于执行相对类似的工作。需要做出深思熟虑的决定,这也包含了开发过程和环境的要求。
同样使用匹配器是使用 Tell,do not Ask 原则的好方法。您可以将匹配器传递给方法,以指示您希望返回的返回值。如果有问题的对象与该匹配器不匹配,则可以立即抛出具有良好错误描述的异常。
此外,在将匹配器的使用与java 8的Predicate
进行比较时,匹配器的好处是能够提供描述,但缺点是它们本身不是功能接口。
答案 1 :(得分:3)
它可以用于非测试代码。例如。 LambdaJ库支持Hamcrest匹配器:https://code.google.com/p/lambdaj/wiki/LambdajFeatures