gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:45 25 4
gpt4 key购买 nike

我正试图找到在非测试代码中使用 Hamcrest 匹配器的明确答案。我做了一些研究,并有一些对比引述:

  • Hamcrest Wikipedia :

    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 2 and jMock.

  • Hamcrest Github :

    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 validation 可以用来做相对类似的工作。比需要做出深思熟虑的决定,这也结合了开发过程和环境的要求。

此外,使用匹配器也是采用告诉,不询问 原则的好方法。您可以将匹配器传递给方法以指示您期望返回的返回值。如果有问题的对象与那个匹配器不匹配,那么可以立即抛出一个对错误有很好描述的异常。

此外,当将匹配器的使用与 java 8 的 Predicate 进行比较时,匹配器的优点是能够提供描述,但缺点是它们本身不是函数式接口(interface)。

关于java - 在非测试代码中使用 Hamcrest 匹配器是否可以接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com