最佳实践验证使用hamcrest可选

时间:2017-08-08 10:59:26

标签: java android unit-testing testing guava

此测试不起作用

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)));

1 个答案:

答案 0 :(得分:1)

此消息:

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()正在返回非空可选。

此外,如果您想检查测试中的可选项是否为空,我建议您使用方法isPresent()

而不是assertThat(bundle.getTracking(), equalTo(Optional.absent()))只使用assertTrue(bundle.getTracking().isPresent())