如何使用Mockito测试和模拟用Java编写的GRPC服务



protobuf的定义如下:

syntax = "proto3";
package helloworld;
// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}
// The response message containing the greetings
message HelloReply {
  string message = 1;
}

我需要使用 Mockito 和 JUnit 测试。

测试服务的鼓励方法是使用进程内传输和普通存根。然后,您可以像往常一样与服务进行通信,而无需大量嘲笑。过度使用的模拟会产生脆弱的测试,这些测试不会灌输对正在测试的代码的信心。

GrpcServerRule在后台使用进程内传输。我们现在建议看一下示例的测试,从hello world开始。

编辑:我们现在建议GrpcCleanupRule超过GrpcServerRule。您仍然可以引用 hello world 示例。

这个想法是存根响应和流观察器。

@Test
public void shouldTestGreeterService() throws Exception {
    Greeter service = new Greeter();
    HelloRequest req = HelloRequest.newBuilder()
            .setName("hello")
            .build();
    StreamObserver<HelloRequest> observer = mock(StreamObserver.class);
    service.sayHello(req, observer);
    verify(observer, times(1)).onCompleted();
    ArgumentCaptor<HelloReply> captor = ArgumentCaptor.forClass(HelloReply.class);
    verify(observer, times(1)).onNext(captor.capture());
    HelloReply response = captor.getValue();
    assertThat(response.getStatus(), is(true));
}

相关内容

  • 没有找到相关文章

最新更新