assertEquals在不可转换的String和Optional <string> JUnit测试的对象之间

时间:2016-10-18 19:22:15

标签: java junit java-8 junit4

我正在尝试测试Java 8可选,但是当我将鼠标悬停在assertEquals上时,它会显示Equals between objects of inconvertible String and Optional<String>

@Test
    @Sql({"applicant.sql"})
    public void findbySSN() throws Exception {
        TApplicant tApplicant;

        tApplicant = applicant.findbySSN("000000008");

        assertNotNull(tApplicant.getIndSsn());
        assertEquals("N",tApplicant.getAsvabScrTypCd());

    }

我不太清楚如何处理这个问题。

在课程中,该方法看起来像public Optional<String> getAsvabScrTypCd() { return Optional.ofNullable(asvabScrTypCd);}

------------------------ Update 1 --------------------- ----

引起我的注意,AssertJ可能就是答案,但却没有认出.isNotEmpty());.hasValue("N");

我仔细检查,我有maven依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
    </dependency>

@Test
    @Sql({"applicant.sql"})
    public void findbySSN() throws Exception {
        TApplicant tApplicant;

        tApplicant = applicant.findbySSN("000000008");

        assertNotNull(tApplicant.getIndSsn());

        assertThat(tApplicant.getAsvabScrTypCd().isNotEmpty());
        assertThat(tApplicant.getAsvabScrTypCd()).hasValue("N");
    }

有一篇类似的帖子HERE,但没有帮助我。

1 个答案:

答案 0 :(得分:1)

您不需要使用AssertJ。我链接的帖子中的second answer应该有所帮助。测试Optional是否包含预期值的最简单方法是调用Optional.get()

assertEquals("N", tApplicant.getAsvabScrTypCd().get());

或者,使用Optional.of()

assertEquals(Optional.of("N"), tApplicant.getAsvabScrTypCd());

查看我链接到的帖子以获取其他选项。避免直接调用Optional.get()通常是一个好主意,因为它会引发异常,而Optional的重点是从运行时到编译时移动错误检查nullables。也就是说,对于测试代码而言,这可能不是一个问题。