java.util.NoSuchElementException: No value present - Error - Optional.get 在使用 Spring 的 JUNIT 测试中

新手上路,请多包涵

我有一个使用 Optional 的测试。在该方法中,它声明不存在任何值。这是代码,我有。我如何在没有 NoSuchElementException 的情况下通过此过程。

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

        return jobTitleMapper.entityToModel(this.jobTitleRepository.findById(id).get());
}

它对 Java 8 中的 get() 很感兴趣。

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

测试是:

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

谢谢您的帮助。

原文由 starlord 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

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

您可以使用以下内容修复此问题: this.jobTitleRepository.findById(id).orElseGet(null)this.jobTitleRepository.findById(id).orElseGet(new Jobs())

或修复原始方法中的返回可选类型: jobTitleRepository.findById(id)

你能把这个方法 jobTitleRepository.findById(id) 也贴在你的帖子上吗?

原文由 Laguh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题