gpt4 book ai didi

Java 断言 : How to assert for 2 fields on same value

转载 作者:行者123 更新时间:2023-11-30 02:17:40 25 4
gpt4 key购买 nike

在我的代码中,我必须针对 2 个字段断言一个值。这就是我必须做的:

assertThat(request.get(0).name()).isEqualTo("ABC");
assertThat(request.get(0).name2()).isEqualTo("ABC");

如何对上述两行使用一个单行断言?

例如,解释更多我需要的内容:

有没有一种方法可以实现类似的目标:

assertThat(request.get(0).name() && request.get(0).name2()).isEqualTo("ABC");

最佳答案

How can I use one single line assertion for the above 2 lines?

为什么要做这样的事情?

尝试过于聪明,你会得到两个缺点:

  • 您将使测试的阅读和维护变得更加复杂。
  • 当测试失败时,您将丢失相关反馈信息

实际上你的测试没问题。
如果这两个值中的任何一个不符合断言,您就会有发现问题的确切行,并且还会有相关的信息消息。

作为提示,您也许可以删除重复项:

final String expected = "ABC";
assertThat(request.get(0).name()).isEqualTo(expected);
assertThat(request.get(0).name2()).isEqualTo(expected);

我不想说在同一个语句中做出多个断言是不好的。
完全不是。
我只是说您必须根据您正在使用的工具调整断言方式。
关于它,您没有指定匹配器工具。
如果匹配器工具提供了进行此类断言的支持,请使用它。
否则,不要以原始方式进行,否则您将失去获得有用的故障测试消息的好处。

<小时/>

以下是 AssertJ 的示例,它提供了开箱即用的此功能。

@Test
void namesEquals() {
List<Request> requests = new ArrayList<>();
requests.add(new Request("ABC", "ABD"));
Assertions.assertThat(requests.get(0)).extracting(Request::name, Request::name2)
.containsExactly("ABC", "ABC");
}

在这个失败的测试中,您将收到一条有用的信息消息:

java.lang.AssertionError:

Expecting:

<["ABC", "ABD"]>

to contain exactly (and in same order):

<["ABC", "ABC"]>

but some elements were not found:

<[]>

and others were not expected:

<["ABD"]>

关于Java 断言 : How to assert for 2 fields on same value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803119/

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