gpt4 book ai didi

java - 在 Optional 中使用 assertJ 断言值

转载 作者:行者123 更新时间:2023-12-01 14:06:11 24 4
gpt4 key购买 nike

我有两个类:

class Outer {
Inner inner = new Inner("value");
}

class Inner {
private final String value;

Inner(String value) {
this.value = value;
}
}

public Optional<Outer> getOptionalValue() {
return Optional.of(new Outer());
}

我的测试:
public void testCLass() {
Assertions.assertThat(getOptionalValue())
.isPresent()
.map(v -> v.inner.value)
.isEqualTo("value");
}

我希望它会通过,因为 isPresent展开 optional , map转换 Outer进入 value在最后一种方法中,我只是比较字符串。
但它在最后一行显示消息失败:
Expecting:
<Optional[value]>
to be equal to:
<"value">
but was not.
我不知道为什么没有打开 optional

最佳答案

OptionalAssert 的 javadoc的map方法状态

Call map on the Optional under test, assertions chained afterwards are performed on the Optional resulting from the map call.


但是, isEqualTo 实际上是比较 AbstractAssert 的值作为一个整体。它不会被 OptionalAssert 覆盖比较封闭的值。一个 OptionalAssert的值, Optional本身,不等于 String .
你会想要使用 hasValue

Verifies that the actual Optional contains the given value (alias of contains(Object)).

Assertion will pass :

assertThat(Optional.of("something")).hasValue("something");
assertThat(Optional.of(10)).contains(10);

所以
Assertions.assertThat(getOptionalValue())
.isPresent()
.map(v -> v.inner.value)
.hasValue("value");
或者,因为 hasValue实际执行 isPresent内部检查,你可以使用
Assertions.assertThat(getOptionalValue())
.map(v -> v.inner.value)
.hasValue("value");

关于java - 在 Optional 中使用 assertJ 断言值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62563313/

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