C# 如何将高度定制的TestServer设置从.NET Core 3.0升级到3.1

C# 如何将高度定制的TestServer设置从.NET Core 3.0升级到3.1,c#,asp.net-core-3.1,asp.net-core-testhost,C#,Asp.net Core 3.1,Asp.net Core Testhost,我有一个TestServer,它扩展了AspNetCore.TestHost.TestServer,作为.NET Core升级到3.1的一部分,我正在升级它,升级项目效果很好 <TargetFramework>netcoreapp3.0</TargetFramework> netcoreapp3.0 但是,一旦我将Microsoft.AspNetCore.TestHost从3.0.0升级到3.1.x,我的测试就会在无限循环中运行。 我已尝试将我的TestServer转

我有一个TestServer,它扩展了AspNetCore.TestHost.TestServer,作为.NET Core升级到3.1的一部分,我正在升级它,升级项目效果很好

<TargetFramework>netcoreapp3.0</TargetFramework>
netcoreapp3.0
但是,一旦我将Microsoft.AspNetCore.TestHost从3.0.0升级到3.1.x,我的测试就会在无限循环中运行。 我已尝试将我的TestServer转换为新设置,如下所示: 但是我们有太多的扩展和定制,很难翻译。 我怀疑问题在于我们的模拟程序读取非常大的json文件

TestServer如下所示:

public class MyTestServer : TestServer
{
    private MyTestServer(IWebHostBuilder builder) : base(builder)
    {
        TestHelperSettings = UriTestHelperSettings.Default;
    }

    public UriTestHelperSettings TestHelperSettings { get; }

    public static MyTestServer Create<TStartup>() where TStartup : class
    {
        var builder = new WebHostBuilder()
            .ConfigureAppConfiguration((context, config) =>
            {
                config.AddJsonFile("appsettings.Test.json", false);
            })
            .UseStartup<TStartup>()
            .UseEnvironment("Development");

        var testServer = new MyTestServer(builder)
        {
            ApiExporer = UriTestHelpers.ApiExplorer
        };

        return testServer;
    }

    public IApiDescriptionGroupCollectionProvider ApiExporer { get; private set; }

    public static MyTestServer Create() => Create<TestStartup>();
}
    public class MyTestServer : TestServer
{
    private MyTestServer(IWebHostBuilder builder) : base(builder)
    {
    }

    public static TestServer Create<TStartup>() where TStartup : class
    {
        var builder = new HostBuilder()
            .ConfigureAppConfiguration((context, config) =>
            {
                config.AddJsonFile("appsettings.Test.json", false);
            })
            .ConfigureWebHost(webHost =>
            {
                webHost.UseTestServer();
                webHost.UseStartup<TestStartup>();
                webHost.UseEnvironment("Development");
            });

        var host = CreateHost(builder);
        TestClient = host.GetTestClient();
        host.GetTestServer().AllowSynchronousIO = true;
        return host.GetTestServer();
    }

    public static IHost HostWeb { get; set; }

    protected static IHost CreateHost(IHostBuilder builder)
    {
        HostWeb = builder.Build();

        HostWeb.Start();
    
        return HostWeb;
    }

    public static UriTestHelperSettings TestHelperSettings => UriTestHelperSettings.Default;

    public static IApiDescriptionGroupCollectionProvider ApiExporer => UriTestHelpers.ApiExplorer;

    public static TestServer Create() => Create<TestStartup>();

    public static HttpClient TestClient { get; set; }
}
公共类MyTestServer:TestServer { 私有MyTestServer(IWebHostBuilder):基本(生成器) { TestHelperSettings=UriTestHelperSettings.Default; } public UriTestHelperSettings TestHelperSettings{get;} 公共静态MyTestServer Create(),其中TStartup:class { var builder=新的WebHostBuilder() .ConfigureAppConfiguration((上下文,配置)=> { config.AddJsonFile(“appsettings.Test.json”,false); }) .UseStartup() .使用环境(“开发”); var testServer=新的MyTestServer(构建器) { ApiExporer=UriTestHelpers.ApiExplorer }; 返回testServer; } 公共IApiDescriptionGroupCollectionProvider ApiExporer{get;private set;} 公共静态MyTestServer Create()=>Create(); } 而我的尝试,其中一个转换它看起来像这样:

public class MyTestServer : TestServer
{
    private MyTestServer(IWebHostBuilder builder) : base(builder)
    {
        TestHelperSettings = UriTestHelperSettings.Default;
    }

    public UriTestHelperSettings TestHelperSettings { get; }

    public static MyTestServer Create<TStartup>() where TStartup : class
    {
        var builder = new WebHostBuilder()
            .ConfigureAppConfiguration((context, config) =>
            {
                config.AddJsonFile("appsettings.Test.json", false);
            })
            .UseStartup<TStartup>()
            .UseEnvironment("Development");

        var testServer = new MyTestServer(builder)
        {
            ApiExporer = UriTestHelpers.ApiExplorer
        };

        return testServer;
    }

    public IApiDescriptionGroupCollectionProvider ApiExporer { get; private set; }

    public static MyTestServer Create() => Create<TestStartup>();
}
    public class MyTestServer : TestServer
{
    private MyTestServer(IWebHostBuilder builder) : base(builder)
    {
    }

    public static TestServer Create<TStartup>() where TStartup : class
    {
        var builder = new HostBuilder()
            .ConfigureAppConfiguration((context, config) =>
            {
                config.AddJsonFile("appsettings.Test.json", false);
            })
            .ConfigureWebHost(webHost =>
            {
                webHost.UseTestServer();
                webHost.UseStartup<TestStartup>();
                webHost.UseEnvironment("Development");
            });

        var host = CreateHost(builder);
        TestClient = host.GetTestClient();
        host.GetTestServer().AllowSynchronousIO = true;
        return host.GetTestServer();
    }

    public static IHost HostWeb { get; set; }

    protected static IHost CreateHost(IHostBuilder builder)
    {
        HostWeb = builder.Build();

        HostWeb.Start();
    
        return HostWeb;
    }

    public static UriTestHelperSettings TestHelperSettings => UriTestHelperSettings.Default;

    public static IApiDescriptionGroupCollectionProvider ApiExporer => UriTestHelpers.ApiExplorer;

    public static TestServer Create() => Create<TestStartup>();

    public static HttpClient TestClient { get; set; }
}
公共类MyTestServer:TestServer { 私有MyTestServer(IWebHostBuilder):基本(生成器) { } 公共静态TestServer Create(),其中TStartup:class { var builder=新主机生成器() .ConfigureAppConfiguration((上下文,配置)=> { config.AddJsonFile(“appsettings.Test.json”,false); }) .ConfigureWebHost(webHost=> { webHost.UseTestServer(); webHost.UseStartup(); webHost.UseEnvironment(“开发”); }); var host=CreateHost(生成器); TestClient=host.GetTestClient(); host.GetTestServer().AllowSynchronousIO=true; 返回host.GetTestServer(); } 公共静态iHostWeb{get;set;} 受保护的静态IHost CreateHost(IHostBuilder) { HostWeb=builder.Build(); HostWeb.Start(); 返回HostWeb; } 公共静态UriTestHelperSettings TestHelperSettings=>UriTestHelperSettings.Default; 公共静态IApiDescriptionGroupCollectionProvider ApiExporer=>UritesHelpers.ApiExplorer; 公共静态测试服务器Create()=>Create(); 公共静态HttpClient TestClient{get;set;} } 我曾拼命尝试创建一个最小运行项目,但所需的类数量不断增加,使我担心我暴露了敏感的公司数据