使用 hamcrest 验证 Optional 的最佳实践
Best practice to verify Optional using hamcrest
此测试无效
assertThat(bundle.getMyObj(), equalTo(Optional.absent()));
一开始我只是用一个普通的对象。 (还没有使用可选<>)
private MyObj myObj;
测试看起来像这样
assertThat(myBundle.getMyObj(), nullValue());
我将 myObj 更改为
private Optional<MyObj> myObj = Optional.absent();
然后我把测试改成了
assertThat(bundle.getTracking(), equalTo(Optional.absent()));
然后我得到一个错误
java.lang.AssertionError:
Expected: <Optional.absent()>
but: was <Optional.of(com.my.package.MyObj@2a9627bc)>
Expected :<Optional.absent()>
Actual :<Optional.of(com.my.package.MyObj@2a9627bc)>
我也试过下面这段代码,但出现编译错误
assertThat(myBundle.getMyObj(), equalTo(Optional.of(MyObj)));
这条消息:
java.lang.AssertionError:
Expected: <Optional.absent()>
but: was <Optional.of(com.my.package.MyObj@2a9627bc)>
Expected :<Optional.absent()>
Actual :<Optional.of(com.my.package.MyObj@2a9627bc)>
表示您的 Optional
对象不为空。似乎 bundle.getTracking()
正在返回 not empty optional.
此外,如果您想在测试中检查可选是否为空,我建议您使用方法 isPresent()
。
而不是 assertThat(bundle.getTracking(), equalTo(Optional.absent()))
只需使用 assertTrue(bundle.getTracking().isPresent())
使用 JUnit5 的最佳实践:
import static org.junit.jupiter.api.Assertions.assertTrue;
assertTrue(myOptional.isPresent());
此测试无效
assertThat(bundle.getMyObj(), equalTo(Optional.absent()));
一开始我只是用一个普通的对象。 (还没有使用可选<>)
private MyObj myObj;
测试看起来像这样
assertThat(myBundle.getMyObj(), nullValue());
我将 myObj 更改为
private Optional<MyObj> myObj = Optional.absent();
然后我把测试改成了
assertThat(bundle.getTracking(), equalTo(Optional.absent()));
然后我得到一个错误
java.lang.AssertionError:
Expected: <Optional.absent()>
but: was <Optional.of(com.my.package.MyObj@2a9627bc)>
Expected :<Optional.absent()>
Actual :<Optional.of(com.my.package.MyObj@2a9627bc)>
我也试过下面这段代码,但出现编译错误
assertThat(myBundle.getMyObj(), equalTo(Optional.of(MyObj)));
这条消息:
java.lang.AssertionError:
Expected: <Optional.absent()>
but: was <Optional.of(com.my.package.MyObj@2a9627bc)>
Expected :<Optional.absent()>
Actual :<Optional.of(com.my.package.MyObj@2a9627bc)>
表示您的 Optional
对象不为空。似乎 bundle.getTracking()
正在返回 not empty optional.
此外,如果您想在测试中检查可选是否为空,我建议您使用方法 isPresent()
。
而不是 assertThat(bundle.getTracking(), equalTo(Optional.absent()))
只需使用 assertTrue(bundle.getTracking().isPresent())
使用 JUnit5 的最佳实践:
import static org.junit.jupiter.api.Assertions.assertTrue;
assertTrue(myOptional.isPresent());