断言Optional具有特定值

2023/05/12

1. 概述

当我们测试返回Optional对象的方法时,我们可能需要编写断言来检查Optional是否有值或检查其中包含的值。

在这个教程中,我们介绍如何使用JUnit和AssertJ中的方法编写这些断言。

2. 测试一个Optional是否为空

如果我们只需要找出Optional是否有值,我们可以使用isPresent或isEmpty断言。

2.1 测试Optional有一个值

如果Optional有值,我们可以在Optional.isPresent上断言:

assertTrue(optional.isPresent());

不过,AssertJ库提供了一种更流畅的表达方式:

assertThat(optional).isNotEmpty();

2.2 测试Optional为空

当使用JUnit时,我们可以反转逻辑:

assertFalse(optional.isPresent());

此外,在Java 11之后,我们可以使用Optional.isEmpty:

assertTrue(optional.isEmpty());

但是,AssertJ也为我们提供了一个简洁的替代方案:

assertThat(optional).isEmpty();

3. 测试一个Optional的值

通常我们想要测试Optional中的值,而不仅仅是存在或不存在。

3.1 使用JUnit Assertions

我们可以使用Optional.get来获取值,然后编写一个断言:

Optional<String> optional = Optional.of("SOMEVALUE");
assertEquals("SOMEVALUE", optional.get());

但是,使用get可能会导致异常,这使得更难理解测试失败;因此,我们可能更倾向于先断言该值是否存在:

assertTrue(optional.isPresent());
assertEquals("SOMEVALUE", optional.get());

不过,Optional支持equals方法,因此我们可以使用具有正确值的Optional作为一般相等断言的一部分:

Optional<String> expected = Optional.of("SOMEVALUE");
Optional<String> actual = Optional.of("SOMEVALUE");
assertEquals(expected, actual);

3.2 使用AssertJ

使用AssertJ,我们可以使用hasValue流式断言:

assertThat(Optional.of("SOMEVALUE")).hasValue("SOMEVALUE");

4. 总结

在本文中,我们介绍了几种测试Optional的方法。

我们演示了内置的JUnit断言如何与isPresent和get一起使用,并介绍了Optional.equals如何为我们提供了一种比较断言中的Optional对象的方法。

最后,我们介绍了AssertJ断言,它为我们提供了流式的API来检查我们的Optional值。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章