junit 如何在java中Assert一个String< Optional>而不Assert一个Optional< optional>?

hl0ma9xz  于 2023-08-05  发布在  Java
关注(0)|答案(3)|浏览(170)

我正在创建一个返回字符串的JUnit测试用例。但是我一直得到这个错误:
expected: java.util.Optional but was java.lang.String
第一个月
当我试图期待一个字符串时,我得到
expected <9999999.0000> but was <Optional[9999999]>
(Yes,返回的字符串是数字9999999,而不是整数。)
我已经尽我所能地查找了如何使用String,并且不断地得到关于java.util的信息。可选版本,没有弹出任何关于我实际需要的信息。不仅如此,在我的项目中还有大量的其他测试只是正常地比较字符串。正在使用
assertEquals.("hello", getString())
它们都能正常工作,但是当我在这里做的时候,错误被抛出了。会不会是因为我从一个对象中获取字符串呢?类似于:Object.getString()

xbp102n0

xbp102n01#

如果您不确定Optional是否有值,

Optional<String> string = getString();
assertTrue(optional.isPresent());
assertEquals("hello", optional.get());

字符串
如果你确定,你可以省略第一个Assert。如果它不存在,将抛出一个异常,这也将使测试失败。

6qqygrtg

6qqygrtg2#

也许你正在尝试比较两种不同的类型。将预期值 Package 为Optional Optional.of(expectedValue),或展开实际值actualValue.get()

oalqel3c

oalqel3c3#

所以我意识到问题是我把一个字符串变成了一个可选的,因为它在测试的早期可能是null。然后我把它转换回字符串,因为我的方法需要返回一个字符串。
所以这个值是一个string -> optional -> string。我的预期需要反映这一点,所以我的Assert是这样的:第一个月
"4.0000"是一个字符串,通过Optional.of()方法将其转换为可选字符串。然后它被转换回一个字符串toString()

相关问题