【问题标题】:Recursive SamePropertyValuesAs matcher in hamcresthamcrest 中的递归 SamePropertyValuesAs 匹配器
【发布时间】:2012-01-28 00:19:32
【问题描述】:

我正在寻找一个 hamcrest 匹配器,其行为方式与 SamePropertyValuesAs 相同,但如果属性不是原始属性,则为标准 Java 类之一(字符串、整数等)或其中之一(集合或数组),那么它也会对这些属性进行递归匹配。

那里有这样的匹配器还是我必须自己推出?

【问题讨论】:

  • 如果你写了这样一个Matcher,你将如何识别匹配失败的元素。所以列表 A 中的第三个对象有一个数组 B,它的第 15 个元素有一个 Map D,它的键 E 的值有一个数组 F,它的第三个值是 null 当预期为非 null 时。能够识别哪个对象的哪个字段失败,您的失败消息是什么样的?
  • a[3].b[15].d(e).f[3] 不应该是 null。
  • 您真的希望能够将这么多信息传递到您的递归中吗?听起来你需要自己动手。如果有效,请发布。
  • 即使很难或不可能获得实际失败的匹配(我不明白为什么不,每个级别的递归调用都知道它正在检查哪个字段,完整的描述是堆栈跟踪这些字段),只是在没有具体信息的情况下失败是可以接受的。无论如何,这是现有 SamePropertyValuesAs 匹配器的行为。它不会报告失败的属性
  • 你确定吗?在我看来,SamePropertyValuesAs 的第 99-113 行实现了失败属性的报告。

标签: java unit-testing tdd matcher hamcrest


【解决方案1】:

现在可以通过 Shazam(我工作的地方)的工程师编写的库来解决根本问题。它是一个名为 Shazamcrest 的 bean 比较库。

它非常强大,可以生成非常好的诊断。

https://github.com/shazam/shazamcrest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多