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