需要使用新的 .Net Core 3.0 grpc 服务进行集成测试的指导

Mar*_*LFT 8 c# integration-testing grpc asp.net-core

我正在为 .Net Core 3.0 模板使用新的 GRPC 服务。我已经成功创建了 Hello World 服务。我现在正在尝试向此解决方案添加一个测试项目。

我可以看到如何为常规 HTTP 客户端/服务器 .Net Core 服务制作一个内存服务器以进行集成测试。但是我在网络上的任何地方都找不到有关使用 grpc protodef 客户端/服务器的示例或指导。问题似乎与 CreateClient() 方法有关,该方法返回一个普通的旧 HTTP 客户端,而不是 grpc 客户端。

如果 VS 2019 模板创建的项目中包含准系统集成测试,那就太好了。我关注微服务,尤其是使用 grpc 的主要原因是我可以拥有易于使用自动化测试框架进行测试的小块。但我似乎在第一关就倒下了。

[添加]

下面是简单的测试类。它使用 NUnit。我遇到的问题是找到一种运行内存中 TestHost 的方法,就像我对 .Net Core API 或 MVC 应用程序所做的一样,以允许集成测试。

namespace Project.Tests
{
    public class Tests 
    {
        private Greeter.GreeterClient _client;
        private TestServer _server;

        [OneTimeSetUp]
        public void OneTimeSetup()
        {
            var server = new TestServer(WebHost.CreateDefaultBuilder()
                .UseStartup<TestStartup>()
                .UseEnvironment("Development")
                .UseUrls("https://localhost:5001"));
        }

        [SetUp]
        public void Setup()
        {
            var channel = GrpcChannel.ForAddress("https://localhost:5001");
            _client = new Greeter.GreeterClient(channel);
        }

        [Test]
        public async Task Test1()
        {
            var reply = await _client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });
            Assert.IsTrue(reply.Message == "Hello GreeterClient");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bao*_*uoc 2

您能否尝试将测试服务器创建的 HTTPClient 传递到 GRPC 通道中?

当我使用WebApplicationFactory时它有效,之前没有测试过测试服务器。

var channel = GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions
{
    HttpClient = _server.CreateClient()
});
            
var client = new Greeter.GreeterClient(channel);
            
var response await client.SayHelloAsync(new HelloRequest());

// Assert anything you want
Run Code Online (Sandbox Code Playgroud)