我正在尝试测试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,但没有帮助我。
答案 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。也就是说,对于测试代码而言,这可能不是一个问题。