java.util.NoSuchElementException:不存在任何值 - 错误 - 使用 Spring 进行 JUNIT 测试中的Optional.get

sta*_*ord 9 java junit

我有一个使用可选的测试。在该方法中,它声明不存在任何值。这是代码,我有。我怎样才能在没有 NoSuchElementException 的情况下完成此传递。

 public jobs theID(Integer id) {  
        if( id == null) {
            throw new IllegalArgumentException("Its missing.");
        }


        return jobTitleMapper.entityToModel(this.jobTitleRepository.findById(id).get());
}
Run Code Online (Sandbox Code Playgroud)

它对 Java 8 中的 get() 感到大惊小怪。

从这个意义上讲,如何正确使用带有 isPresent 的Optional?

测试是:

public void findIdTest() {
    Jobs jt = this.Service.theID(Entities.thisID);
    Assert.assertNotNull(jt);
    Assert.assertEquals(Entities.thisID, .getId());
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助。

Lag*_*guh 6

发生这种情况是因为: 返回的Optional this.jobTitleRepository.findById(id)可以返回一个empty,因此如果您对其调用 get() ,它将抛出一个java.util.NoSuchElementException

你可以用类似的方法来解决这个问题: this.jobTitleRepository.findById(id).orElseGet(null) 或者 this.jobTitleRepository.findById(id).orElseGet(new Jobs())

或者修复原方法中的返回Optional类型:jobTitleRepository.findById(id)

jobTitleRepository.findById(id)您也可以在您的帖子中发布此方法吗?


Kam*_*l W 0

jobTitleRepository.findById(id)它总是返回一个可选类,因此您不需要检查它是否为 null,而且在调用之前assertEquals()您可以通过调用检查具有传递 id 的对象是否存在someOptional.isPresent(),如果为 true,您可以进行断言。但是您应该规划您的测试用例,以避免将条件陈述与断言混合在一起。