Chapter 36: Unit Testing gRPC Services
Testing Without Network
gRPC provides in-process test infrastructure — no real TCP connections needed:
// C++: InProcessChannel (no network, same process)
grpc::ServerBuilder builder;
builder.RegisterService(&service_impl);
auto server = builder.BuildAndStart();
// Create in-process channel (no TCP!)
auto channel = server->InProcessChannel(grpc::ChannelArguments());
auto stub = MyService::NewStub(channel);
// Test like normal:
grpc::ClientContext ctx;
MyRequest req; MyResponse resp;
auto status = stub->MyMethod(&ctx, req, &resp);
ASSERT_TRUE(status.ok());
Mocking gRPC Clients
// Generated mock (with gmock):
class MockMyServiceStub : public MyService::StubInterface {
MOCK_METHOD(Status, MyMethod, (ClientContext*, const Req&, Resp*));
};
// In test:
MockMyServiceStub mock;
EXPECT_CALL(mock, MyMethod(_, _, _)).WillOnce(Return(Status::OK));