当前位置: 首页 > 知识库问答 >
问题:

在Mockito测试类中,stream()不能返回Optional

史磊
2023-03-14

我正在为Spring Data Mongo服务开发测试用例。

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Optional cannot be returned by stream()
stream() should return Stream
***
If you're unsure why you're getting above error read on.
Due to the nature of the syntax above problem might occur because:
1. This exception *might* occur in wrongly written multi-threaded tests.
   Please refer to Mockito FAQ on limitations of concurrency testing.
2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - 
   - with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method.

    at com.mastercard.customer.program.refdata.service.SubDivisionServiceTest.findAllSubDivisions_SuccessTest(SubDivisionServiceTest.java:168)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
AggregationResults<EmployeeFacet> employeeFacets = null;
try {
    employeeFacets = mongoTemplate.aggregate(aggregation, Department.class, EmployeeFacet.class);
} catch (Exception ex) {
    log.error(AppConstants.ERROR, AppConstants.DB_ERROR, ex);
    throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, AppConstants.DB_ERROR, ex);
}

另一个代码

private SortOperation getSortOperation(Pageable pageable) {
        SortOperation sortOperation = null;
        Optional<Order> value = pageable.getSort().stream().findFirst();
        if(value.isPresent()) {
            Direction direction = value.get().getDirection();
            String property = value.get().getProperty();
            sortOperation = Aggregation.sort(direction, property); 
        }
        return sortOperation;
    }

共有1个答案

虞华彩
2023-03-14

我能够修复以下使用:

when(pageable.getSort()).thenReturn(Sort.by(order));

这就像魅力一样有效!

 类似资料:
  • 我试着去模拟课堂,但我总是得到一个NPE。我见过当stubing方法时发布mockito-nullPointerException。在这篇文章中,他们这样解释: 我几乎可以肯定这也适用于我的问题。但我找不到解决办法。我已经试了10个小时了。 我还读了一些关于@autowired和@before的东西,显然@autowired是在@before之前创建的,这也可以解释我的NPE。 在@test vo

  • 我还没有看到这个问题的答案能解决我的问题。 我有一个服务类,它是用一个存储库和一个Orika MapperFacade构建的。在测试中,我正在安排存储库调用返回的实体列表。my doReturn(testList).when(testRepository).findAllBy...似乎正在工作。我的实际结果列表包含我在模拟列表中指定的相同数量的元素(.size()),但是这些值都是空的。我对Spr

  • 我正在尝试构建一个使用gradle作为构建工具和openjdk-11的原型。这个原型将在springboot框架上构建一个rest-api。 我的模块与rest api调用配合良好,并返回了预期结果。然而,当我现在试图为RESTAPI编写测试时,测试失败了,因为Mockito返回了空对象。如果您能了解我应该如何为这个rest api编写测试或如何修复它,我将不胜感激。 我的控制器: 服务: 模型:

  • 问题内容: 在尝试JUnit时,我尝试如下测试一个简单的私有方法,该方法接收String并确保其中不包含单词’Dummy’。 我知道,可以将测试 与类 放在同一包 中,并将方法的访问修饰符更改为包,但是我想使用反射来学习这一点。 我试图通过反射访问私有方法,但测试失败!它显示以下异常: 基于这个问题的答案,我也正在抓。 JUnit的 问题答案: 我在上面的评论中同意@Stultuske,并将测试重

  • 当我尝试执行以下操作时: 我得到以下错误: 但是,当我执行时,它工作得很好。 有什么想法吗?我在类中有一个随机生成器(ak),所以我需要间谍而不是嘲笑。 谢谢。