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)
您能否尝试将测试服务器创建的 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)