ASP.NET Core: Giả lập máy khách gRPC trong các thử nghiệm


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong bài viết này

  1. Ví dụ về ứng dụng khách có thể thử nghiệm
  2. Giả lập một máy khách gRPC
  3. Tài nguyên bổ sung

Thử nghiệm là một khía cạnh quan trọng của việc xây dựng phần mềm ổn định và có thể bảo trì. Một phần của việc viết thử nghiệm chất lượng cao là loại bỏ các phụ thuộc bên ngoài. Bài viết này thảo luận về việc sử dụng máy khách gRPC giả lập trong các thử nghiệm nhằm loại bỏ lệnh gọi gRPC tới máy chủ bên ngoài.

Ví dụ về ứng dụng khách có thể thử nghiệm

Để chứng minh thử nghiệm ứng dụng khách, hãy xem lại kiểu sau trong ứng dụng mẫu.

Xem hoặc tải xuống code mẫu ( cách tải xuống )

Worker là một BackgroundService thực hiện lời gọi đến máy chủ 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);
        }
    }
}

Kiểu trên:

  • Tuân theo Nguyên tắc phụ thuộc tường minh.
  • TesterClient được tạo tự động bởi gói công cụ Grpc.Tools dựa trên file test.proto trong quá trình xây dựng.
  • Dự kiến ​​việc chèn phụ thuộc (DI) sẽ cung cấp các thể hiện của TesterClient và IGreetRepository. Ứng dụng được định cấu hình để sử dụng factory máy khách gRPC để tạo các file TesterClient.
  • Có thể được thử nghiệm với dịch vụ IGreetRepository và máy khách TesterClient được giả lập bằng cách sử dụng framework đối tượng giả lập, chẳng hạn như Moq. Một đối tượng giả lập là một đối tượng được chế tạo với một tập hợp các property và hành vi phương thức được xác định trước được sử dụng để thử nghiệm. Để biết thêm thông tin, hãy xem Kiểm tra tích hợp trong ASP.NET Core.

Để biết thêm thông tin về nội dung C# được Grpc.Tools tự động tạo, hãy xem các dịch vụ gRPC với C#: Nội dung C# được tạo.

Giả lập một máy khách gRPC

Máy khách gRPC là các loại máy khách cụ thể được tạo từ file .proto. Máy khách gRPC cụ thể có các phương thức chuyển sang dịch vụ gRPC trong file .proto. Ví dụ: một dịch vụ được gọi Greeter sẽ tạo ra một kiểu GreeterClient có các phương thức để gọi dịch vụ.

Framework giả lập có thể mô phỏng kiểu máy khách gRPC. Khi một máy khách được mô phỏng được chuyển sang kiểu, thì quá trình thử nghiệm sẽ sử dụng phương thức được mô phỏng thay vì gửi lệnh gọi gRPC đến máy chủ.

[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"));
}

Thử nghiệm đơn vị trước:

  • Giả lập IGreetRepository và TesterClient sử dụng Moq.
  • Bắt đầu worker.
  • Xác minh SaveGreeting được gọi với message greeting được trả về bởi TesterClient.

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Dịch vụ gRPC với ASP.NET Core
« Trước: Sử dụng ứng dụng khách gRPC với .NET Standard 2.0
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!