gpt4 book ai didi

java - 使用 hamcrest 比较包含另一个对象列表的对象列表

转载 作者:行者123 更新时间:2023-12-02 07:47:04 25 4
gpt4 key购买 nike

我有以下对象图:

Order --> List of Lines --> List of Shipments object

Line 对象有一个名为 lineNumber 的属性。 Shipment 对象还有一个名为 lineNumber 的属性。我不知道为什么他们两张牌上都有它,但这些是我处理过的牌。

是否可以比较 line.getLineNumber().equals(shipment.getLineNumber())每行?

所以实际上,我想测试以下内容:

for(Line line : order.getLines(){
for(Shipment ship : line.getShipments()) {
assertEquals(line.getLineNumber(), shipment.getLineNumber());
}
}

我尝试了以下方法,但没有成功:

assertThat(order.getLines(), everyItem(Matchers.<Line>hasProperty("shipments", everyItem(Matchers.<Shipment>hasProperty("lineNumber", is(line.getLineNumber())))))

显然,我没有对 line 的引用,那么在这种情况下我将如何比较这些值?

最佳答案

assertThat 恰好需要两个参数(好吧,三个,但第三个参数只是失败时要打印的消息):

  1. 实际值(所以,是的,getLines())就可以了
  2. 期望值,应该是某种形式的匹配器

因此,您将多个“预期匹配器”添加到同一调用中的想法根本行不通。

你得到了:

assertThat(a1, e1, e2, e3);

相反:将使用assertThat的单个调用分成多个调用 - 每个调用对应您要检查的每个“预期”条件。

assertThat(a1, e1;
assertThat(a1, e2);...

如果上述方法没有帮助,或者如果您希望编写只需要一个assertThat的代码,您可以随时继续编写自己的客户匹配器,例如从我为其他一些项目组合的简单解决方案开始question .

郑重声明:这是我的第一个自定义匹配器,我在 10 分钟内就让它工作了;换句话说:一旦您了解了这些概念,这就是一项非常简单的任务!

关于java - 使用 hamcrest 比较包含另一个对象列表的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878593/

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