我正在开发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;
}
我能够使用以下内容来解决:
when(pageable.getSort()).thenReturn(Sort.by(order));
这就像魅力一样!
如果您的方法是类型可选的,并且您希望返回方法是类型可选的,请尝试以下代码:
when(pageable.getSort()).thenReturn(Optional.of(order));
返回具有给定值的可选元素,但该值不能为null。如果不确定该值不是null使用Optional.ofNullable
更多信息官方文档