C#/기초

[C#] gRPC Unit Test

딸기우유중독 2024. 7. 4. 16:26

 

 

 

 

 

 

 


 

 

Server

 

https://learn.microsoft.com/en-us/aspnet/core/grpc/test-services?view=aspnetcore-8.0

 

Test gRPC services in ASP.NET Core

Learn how to test gRPC services in ASP.NET Core apps.

learn.microsoft.com

 

 

Client

 

https://learn.microsoft.com/en-us/aspnet/core/grpc/test-client?view=aspnetcore-8.0

 

Mock gRPC client in tests

Learn how to mock gRPC client in .NET tests.

learn.microsoft.com

 

https://afsdzvcx123.tistory.com/entry/C-C-gRPC-%EB%8B%A8%EC%9C%84%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%95%98%EA%B8%B0

 

[C#] C# gRPC 단위테스트 하기

참고 참고 사이트 목적 C# 으로 gRPC Server 를 구현합니다. 원래는 Client 가 Server 에게 메시지를 전송해서 서로 통신을 해야 하지만, Client 를 C# 에서 단위테스트를 통해서 구현하여 C# 에서 gRPC 단위

afsdzvcx123.tistory.com

 

 


 

gRPC 클라이언트 UnitTest할 때

조건에 맞는 호출이 있을때 지정한 반환 값으로 교체.

 

인터셉터

 

gRPC 클라이언트 인터셉터는 나가는 RPC 호출을 가로챌 수 있습니다. 전송된 요청, 들어오는 응답 및 클라이언트 쪽 호출의 컨텍스트에 대한 액세스를 제공합니다.

클라이언트에 대해 재정의할 Interceptor 메서드:

  • BlockingUnaryCall: 단항 RPC의 차단 호출을 가로챕니다.
  • AsyncUnaryCall: 단항 RPC의 비동기 호출을 가로챕니다.
  • AsyncClientStreamingCall: 클라이언트 스트리밍 RPC의 비동기 호출을 가로챕니다.
  • AsyncServerStreamingCall: 서버 스트리밍 RPC의 비동기 호출을 가로챕니다.
  •  
  • AsyncDuplexStreamingCall: 양방향 스트리밍 RPC의 비동기 호출을 가로챕니다.

 

    [TestMethod]
    [TestCategory("Device.Create"), TestCategory("Device.Fail")]
    public void Device_Create_Fail1()
    {
        // Arrange
        // 반환할 Call
        var mockCall = CallHelpers.CreateAsyncUnaryCall(new DeviceReply() { Message = "Failed to create Device" });
        var mock = new Mock<Tag.TagClient>();
        
        // DeviceRequest.Device.Name == null or Empty이면 mockCall 반환.
        mock
            .Setup(m => m.CreateDeviceAsync(It.Is<DeviceRequest>(x => string.IsNullOrEmpty(x.Device.Name)), null,
                null, CancellationToken.None))
            .Returns(mockCall);

        var mockClient = new TagClient(mock.Object);

        // Act
        var data = new DeviceData()
        {
            DeviceGuid = "3FC6034C-D802-4451-A476-12353313E123",
            Name = "",
            Status = 1,
            Type = 1
        };
        var reply = mockClient.CreateDeviceAsync(data, "").Result;
        Console.WriteLine(reply);

        // Assert
        Assert.AreEqual(reply, "Failed to create Device");
    }

 

 

 

 

 


 

 

https://learn.microsoft.com/ko-kr/aspnet/core/grpc/interceptors?view=aspnetcore-8.0

 

.NET의 gRPC 인터셉터

.NET에서 gRPC 인터셉터를 사용하는 방법을 알아봅니다.

learn.microsoft.com

 

 

728x90