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