【问题标题】:How to use hamcrest nullValue with type inference in assertThat如何在 assertThat 中使用带有类型推断的 hamcrest nullValue
【发布时间】:2020-11-03 09:21:18
【问题描述】:

我需要使用 junit 5 和 assertThat 编写测试用例来检查空值。

我写的如下。但是,这会导致数据类型不匹配。

    @Test
    void shouldReturnNull() {
        assertThat(OffsetDateTimeConverter.toOffsetDateTime(null), nullValue(OffsetDateTime.class));
    }

也试过了。然而同样的错误。

    @Test
    void shouldReturnNull() {
        assertThat(OffsetDateTimeConverter.toOffsetDateTime(null), is(nullValue(OffsetDateTime.class)));
    }

任何示例/建议如何使用 nullValue(T type) 来解决此问题?

我需要编写测试用例来验证 java.sql.Date 是否使用我的 Converter 类正确转换为 java.time.OffsetDateTime。因此,我写了如下。

@Test
    void toOffsetDateTime() {
        Date date = new Date(System.currentTimeMillis());
        assertThat(date.toLocalDate()).isEqualTo(OffsetDateTimeConverter.toOffsetDateTime(date).toLocalDate());
    }

上面的测试用例工作正常。

我想知道这是否是正确的方法,因为我将实际值和预期值都转换为本地日期以进行比较?

【问题讨论】:

  • 你可以试试assertThat(cheese, is(nullValue(Cheese.class))吗?参考:hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/core/…
  • @Liquidpie 尝试了建议的方法,同样的错误。也更新了问题。
  • 你的OffsetDateTimeConverter.toOffsetDateTime() 方法是什么样的?
  • @Liquidpie return Optional.ofNullable(date).map(d-> OffsetDateTime.of(d.toLocalDate(), LocalTime.NOON, ZoneOffset.UTC)).orElse(null);跨度>

标签: java junit5 hamcrest assertthat


【解决方案1】:

在我看来你使用了错误的assertThat 方法。

您正在使用 assertj 中的 assertThat 方法,您应该使用 hamcrest 方法。例如:org.hamcrest.MatcherAssert.assertThat

【讨论】:

  • 是的,你是对的。错误的导入是问题所在。您能否也让我知道您对我的第二个问题的看法。我想知道这是改变实际结果和预期结果以匹配值的正确做法吗?
  • 如果您的预期类型与被测方法的返回类型相同(如OffsetDateTime)会更好。但是,有时碰巧没有简单的方法想出相同的类型,使用通用类型进行比较就可以了。预计会给出相同的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2014-08-31
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多