Spring boot 从grpc测试类调用外部存根
我试图使用存根调用grpc服务(proto在不同的jar文件中)。但当我试图调用该服务时,我得到了由io.grpc.statusruntimeexception未实现方法未找到引起的。同样的方法在主类中运行良好,但在测试用例中不起作用 DeviceGroupServiceImplBase deviceService=Mockito.mock(DeviceGroupServiceImplBase.class, AdditionalAnswers.delegatesTo(新设备组ServiceImplBase(){ }));Spring boot 从grpc测试类调用外部存根,spring-boot,junit,grpc-java,cucumber-junit,Spring Boot,Junit,Grpc Java,Cucumber Junit,我试图使用存根调用grpc服务(proto在不同的jar文件中)。但当我试图调用该服务时,我得到了由io.grpc.statusruntimeexception未实现方法未找到引起的。同样的方法在主类中运行良好,但在测试用例中不起作用 DeviceGroupServiceImplBase deviceService=Mockito.mock(DeviceGroupServiceImplBase.class, AdditionalAnswers.delegatesTo(新设备组ServiceImp
您需要实现
getDeviceGroupByDeviceUuid
,默认情况下它返回未实现状态。您可以验证它是否正在调用ServerCall#asyncUnimplementedUneraryCall
DeviceGroupServiceImplBase deviceService =
Mockito.mock(
DeviceGroupServiceImplBase.class,
AdditionalAnswers.delegatesTo(
new DeviceGroupServiceImplBase() {
@Override
public void getDeviceGroupByDeviceUuid(
DeviceUuid request, StreamObserver<DeviceGroup> responseObserver) {
// TODO: implement
}
}));
DeviceGroupServiceImplBase设备服务=
Mockito.mock(
DeviceGroupServiceImplBase.class,
AdditionalAnswers.delegatesTo(
新设备GroupServiceImplbase(){
@凌驾
公共无效getDeviceGroupByDeviceUuid(
DeviceUuid请求,StreamObserver响应(Observer){
//TODO:实现
}
}));
这解决了问题,但为什么它再次调用方法中的实际存根,我是否也需要模拟它?其他答案。delegates to
选项是使模拟调用成为传递对象的实际方法。如果您想在真实对象上使用verify,这将非常有用。如果这只是模拟,它可以工作,除非您需要手动绑定服务。(无论如何都应该避免模拟)//实际方法public void getDevice(Device req,StreamObserver respObs){//一些代码逻辑设备组DeviceGroup=groupStub.getDeviceGroupByDeviceUuid(request);}
//测试用例当(“用户调用getDevice”,()->{DeviceUuid request=DeviceUuid.newBuilder().setDeviceUuid(deviceUUID.build();groupData=mockGroupStub.getDeviceGroupByDeviceUuid(请求);responseObserver=StreamRecorder.create();//此行再次调用实际存根deviceService.getDevice(请求,responseObserver);responseObserver.awaitCompletion(5,TimeUnit.SECONDS);})
是io.grpc.testing.StreamRecorder吗?只看代码,它不应该调用存根。可能是下一行/上一行?它看起来确实在调用存根。如果是,你应该实现该方法。顺便说一句,你不应该阻止调用(最后一行).我已经实现了上面建议的测试方法,但实际的主存根位于服务器未启动的其他jar文件中。理想情况下,不应该调用实际存根,对吗?
DeviceGroupServiceImplBase deviceService =
Mockito.mock(
DeviceGroupServiceImplBase.class,
AdditionalAnswers.delegatesTo(
new DeviceGroupServiceImplBase() {
@Override
public void getDeviceGroupByDeviceUuid(
DeviceUuid request, StreamObserver<DeviceGroup> responseObserver) {
// TODO: implement
}
}));