【发布时间】: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