3.1 KiB
title | author | description | monikerRange | ms.author | ms.custom | ms.date | uid |
---|---|---|---|---|---|---|---|
Mock gRPC client in tests | jamesnk | Learn how to mock gRPC client in .NET tests. | >= aspnetcore-3.1 | wpickett | mvc | 05/02/2022 | grpc/test-client |
Mock gRPC client in tests
Testing is an important aspect of building stable and maintainable software. Part of writing high-quality tests is removing external dependencies. This article discusses using mock gRPC clients in tests to remove gRPC calls to external servers.
Example testable client app
To demonstrate client app tests, review the following type in the sample app.
View or download sample code (how to download)
The Worker
is a BackgroundService that makes calls to a gRPC server.
The preceding type:
- Follows the Explicit Dependencies Principle.
TesterClient
is generated automatically by the tooling package Grpc.Tools based on the test.proto file, during the build process.- Expects dependency injection (DI) to provide instances of
TesterClient
andIGreetRepository
. The app is configured to use the gRPC client factory to createTesterClient
. - Can be tested with a mocked
IGreetRepository
service andTesterClient
client using a mock object framework, such as Moq. A mocked object is a fabricated object with a predetermined set of property and method behaviors used for testing. For more information, see xref:test/integration-tests#introduction-to-integration-tests.
For more information on the C# assets automatically generated by Grpc.Tools, see gRPC services with C#: Generated C# assets.
Mock a gRPC client
gRPC clients are concrete client types that are generated from .proto
files. The concrete gRPC client has methods that translate to the gRPC service in the .proto
file. For example, a service called Greeter
generates a GreeterClient
type with methods to call the service.
A mocking framework can mock a gRPC client type. When a mocked client is passed to the type, the test uses the mocked method instead of sending a gRPC call to a server.
The preceding unit test:
- Mocks
IGreetRepository
andTesterClient
using Moq. - Starts the worker.
- Verifies
SaveGreeting
is called with the greeting message returned by the mockedTesterClient
.