代码之家  ›  专栏  ›  技术社区  ›  Shreshtha Garg

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

  •  5
  • Shreshtha Garg  · 技术社区  · 6 年前

    协议定义如下:

    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测试。

    2 回复  |  直到 3 年前
        1
  •  7
  •   Eric Anderson    6 年前

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

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

    编辑:我们现在建议 GrpcCleanupRule 结束 GrpcServerRule 。您仍然可以参考hello world示例。

        2
  •  5
  •   Selvaram G    6 年前

    其思想是存根响应和流观察器。

    @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));
    }