java.util.NoSuchElementException:没有值存在 - 错误 - 使用Spring进行JUNIT测试时的Optional.get

时间:2018-03-30 18:28:49

标签: java 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());
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

jobTitleRepository.findById(id)它总是返回一个可选类,所以你不需要检查它是否为null,在你调用assertEquals()之前,你可以通过调用{{1}来检查是否存在具有传递id的对象如果它是真的你可以做断言。但是你应该预测你的测试用例,以避免将编码状态与断言混合在一起。

答案 1 :(得分:0)

sendmail [myself for testing] <<-EOF
    SUBJECT:New packages are available

    [machine][directory] has new files for deployment.
EOF

答案 2 :(得分:0)

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

您可以使用以下方法解决此问题: this.jobTitleRepository.findById(id).orElseGet(null) 要么 this.jobTitleRepository.findById(id).orElseGet(new Jobs())

或在原始方法中修复return Optional类型:jobTitleRepository.findById(id)

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