Precept.Grpc
gRPC testing for Precept: pooled channels, typed clients, and assertions over status codes, deadlines and streaming responses.
dotnet add package Precept.Grpc
var greeter = Rpc.Client<Greeter.GreeterClient>();
var reply = await Rpc.CallAsync(
() => greeter.SayHelloAsync(new HelloRequest { Name = "Ada" }, Rpc.Options()));
var greetings = await Rpc.CollectAsync(
greeter.StreamGreetings(new HelloRequest { Name = "Ada" }, Rpc.Options()));
var status = await Rpc.ShouldFailAsync(
() => greeter.SayHelloAsync(new HelloRequest(), Rpc.Options()),
StatusCode.InvalidArgument);
Rpc.Client<T> works for any client generated from a .proto, and Rpc.Options() carries the
configured deadline and the test's cancellation token. Every call is logged with its duration and
status; CollectAsync stops at maxItems (1000 by default) so a misbehaving stream cannot hang the
test forever.
Channels are pooled per address for the run rather than opened per call, and the address comes from
configuration — so the same suite runs against a container started by
Precept.Containers locally and a deployed
service in CI.
Note: gRPC assertions are still the older helpers that throw on their own, rather than the
Assert.That(…) sentence the rest of the framework uses. Moving them onto Subject<T> is planned.
Part of Precept, a .NET 10 test automation framework. Full documentation: assertions · configuration · what is not built yet