2017-08-08 76 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