Napodobení klienta gRPC v testech
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Autor: James Newton-King
Testování je důležitým aspektem vytváření stabilního a udržovatelného softwaru. Součástí psaní vysoce kvalitních testů je odebrání externích závislostí. Tento článek popisuje použití napodobení klientů gRPC v testech k odebrání volání gRPC na externí servery.
Příklad testovatelné klientské aplikace
Pokud chcete předvést testy klientských aplikací, projděte si následující typ ukázkové aplikace.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Jedná se Worker
o službu BackgroundService , která provádí volání serveru gRPC.
public class Worker : BackgroundService
{
private readonly Tester.TesterClient _client;
private readonly IGreetRepository _greetRepository;
public Worker(Tester.TesterClient client, IGreetRepository greetRepository)
{
_client = client;
_greetRepository = greetRepository;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var count = 0;
while (!stoppingToken.IsCancellationRequested)
{
count++;
var reply = await _client.SayHelloUnaryAsync(
new HelloRequest { Name = $"Worker {count}" });
_greetRepository.SaveGreeting(reply.Message);
await Task.Delay(1000, stoppingToken);
}
}
}
Předchozí typ:
- Řídí se principem explicitních závislostí.
TesterClient
je automaticky generována balíčkem nástrojů Grpc.Tools na základě souboru test.proto během procesu sestavení.- Očekává, že injektáž závislostí (DI) poskytne instance a
TesterClient
IGreetRepository
. Aplikace je nakonfigurovaná tak, aby k vytvořeníTesterClient
používala klientskou továrnu gRPC . - Můžete testovat pomocí napodobené
IGreetRepository
služby aTesterClient
klienta pomocí napodobené objektové architektury, jako je Například Moq. Napodobený objekt je objekt s předem určenou sadou vlastností a chování metod používaných k testování. Další informace najdete v tématu Integrační testy v ASP.NET Core.
Další informace o prostředcích jazyka C# automaticky vygenerovaných nástroji Grpc.Tools najdete v tématu služby gRPC s C#: Generované prostředky jazyka C#.
Napodobení klienta gRPC
Klienti gRPC jsou konkrétní typy klientů, kteří se generují ze souborů .proto
. Konkrétní klient gRPC obsahuje metody, které se překládají na službu gRPC v souboru .proto
. Například volání Greeter
služby generuje GreeterClient
typ s metodami volání služby.
Napodobení architektury může napodobovat typ klienta gRPC. Když se do typu předá napodobený klient, test místo odeslání volání gRPC na server použije napodobenou metodu.
[Fact]
public async Task Greeting_Success_RepositoryCalled()
{
// Arrange
var mockRepository = new Mock<IGreetRepository>();
var mockCall = CallHelpers.CreateAsyncUnaryCall(new HelloReply { Message = "Test" });
var mockClient = new Mock<Tester.TesterClient>();
mockClient
.Setup(m => m.SayHelloUnaryAsync(
It.IsAny<HelloRequest>(), null, null, CancellationToken.None))
.Returns(mockCall);
var worker = new Worker(mockClient.Object, mockRepository.Object);
// Act
await worker.StartAsync(CancellationToken.None);
// Assert
mockRepository.Verify(v => v.SaveGreeting("Test"));
}
Předchozí test jednotek:
- Napodobení
IGreetRepository
aTesterClient
použití Moqu - Spustí pracovní proces.
- Ověřuje
SaveGreeting
, že je volána se zprávou s pozdravem vrácenou napodobenímTesterClient
.