.net core 在asp.net core/grpc集成测试中使用HttpTest

.net core 在asp.net core/grpc集成测试中使用HttpTest,.net-core,grpc,flurl,.net Core,Grpc,Flurl,我有一个ASP.NET core/gRPC服务,我想进行集成测试。 在grpc服务中,我对第三方web API进行Flurl调用。 我想用Flurl的HttpTest类模拟这些调用。 我可以让它以一种非常复杂的方式工作,但它必须更容易 目前: var客户端=\u工厂 .WithWebHostBuilder(builder=> { builder.ConfigureTestServices(服务=> { }); }) .CreateClient(新的WebApplicationFactoryCli

我有一个ASP.NET core/gRPC服务,我想进行集成测试。 在grpc服务中,我对第三方web API进行Flurl调用。 我想用Flurl的HttpTest类模拟这些调用。 我可以让它以一种非常复杂的方式工作,但它必须更容易

目前:

var客户端=\u工厂
.WithWebHostBuilder(builder=>
{
builder.ConfigureTestServices(服务=>
{
});
})
.CreateClient(新的WebApplicationFactoryClientOptions
{BaseAddress=新Uri(“http://localhost:5555")});
使用var channel=GrpcChannel.ForAddress(“http://localhost:5555",
新的GRPCChannel选项{HttpClient=client});
var grpcClient=new MyGrpcService.MyClient(通道);
var httpTest=新的httpTest();
var content=new-StringContent(“一些删除的json”,Encoding.UTF8,“application/json”);
httpTest.响应(内容物,200);
...
var resp=await grpcClient.GetSomeDataAsync(someRequest);
n、 b.我正在服务中手动创建IFlurlClient,因为我们需要提供依赖于主机的添加动态证书

我的主要问题是Flurl正在进行真正的HTTP调用,而不是使用HttpTest

经过一些挖掘,这是由于
HttpTest.Current
的静态特性造成的。Flurl使用的静态
HttpTest.Current
在测试中设置,但在服务器中不存在。我通过对FlurlClientFactoryBase的DI覆盖,将外部的HttpTest.ResponseQueue转发给服务内部的HttpTest.ResponseQueue,成功地破解了它,但这似乎远远不够理想


有没有一种标准的集成测试服务并让Flurl的HttpTest模拟任何传出的HTTP调用的方法?

为了让Flurl在存在
HttpTest
对象的过程中发出信号(有效地对其自身)来模拟所有调用,而无需求助于静态上下文(这会扰乱并行测试),它需要一些上下文来将这些信息从测试流到SUT,再流到Flurl的库位中。在.NETCore中,实现这一点的机制是,这是一个逻辑调用上下文,可以流到异步continuations

但是,默认情况下它不能跨越的一个边界是
TestServer
。正如所宣布的那样,这是出于设计。尽管我还没有尝试过,但该声明似乎暗示,如果您像这样创建测试客户机,您可以实现这一点:

var server = new TestServer(webHostBuilder) 
{
    PreserveExecutionContext = true;
};
var client = server.CreateClient();

您使用的是哪个版本的.NET Core?@ToddMenier v 3.0Thanks将对此进行测试。