首页 > 解决方案 > 如何在 assertThat 中使用带有类型推断的 hamcrest nullValue

问题描述

我需要使用 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());
    }

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

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

标签: javajunit5hamcrestassertthat

解决方案


在我看来,您使用的是错误的assertThat方法。

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


推荐阅读