2017-08-08 77 views
0

此测试工作不最佳实践来验证可选使用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())); 

然后我得到了一个e RROR

java.lang.AssertionError: 
Expected: <Optional.absent()> 
    but: was <Optional.of([email protected])> 
Expected :<Optional.absent()> 

Actual :<Optional.of([email protected])> 

我也试试下面这段代码,但得到编译错误

assertThat(myBundle.getMyObj(), equalTo(Optional.of(MyObj))); 
+0

您可以检查是否备选'的isEmpty()'或不 – ByeBye

+0

是最好的做法? – UmAnusorn

+0

这是更详细和更短 – ByeBye

回答

1

此消息:

java.lang.AssertionError: 
Expected: <Optional.absent()> 
but: was <Optional.of([email protected])> 
Expected :<Optional.absent()> 
Actual :<Optional.of([email protected])> 

说你Optional对象是不是空的。看来bundle.getTracking()正在返回不为空可选。

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

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

+0

现在我验证nonNull(),并尝试专门验证它,所以我添加assertequalTo(Optional.absent()),然后验证.isPresent()..可能我不应该验证equalTo( Optional.absent()) – UmAnusorn