【问题标题】:Best practice to verify Optional using hamcrest使用 hamcrest 验证 Optional 的最佳实践
【发布时间】:2017-08-08 10:59:26
【问题描述】:

此测试无效

assertThat(bundle.getMyObj(), equalTo(Optional.absent()));

一开始我只是使用一个普通的对象。 (还没有使用 optional)

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

【问题讨论】:

  • 您可以检查是否可选isEmpty()
  • 这是最佳做法吗?
  • 更冗长更短

标签: java android unit-testing testing guava


【解决方案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() 似乎返回 not empty 可选。

另外,如果您想在测试中检查 optional 是否为空,我建议您使用方法isPresent()

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

【讨论】:

  • 现在我验证 nonNull() 并尝试专门验证它,所以我添加 assertequalTo(Optional.absent()) 然后验证 .isPresent().. 可能我不应该验证 equalTo( Optional.absent())
【解决方案2】:

使用 JUnit5 的最佳实践:

import static org.junit.jupiter.api.Assertions.assertTrue;
assertTrue(myOptional.isPresent());

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2014-01-23
    相关资源
    最近更新 更多