C# 如何将高度定制的TestServer设置从.NET Core 3.0升级到3.1
我有一个TestServer,它扩展了AspNetCore.TestHost.TestServer,作为.NET Core升级到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转
<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;}
}
我曾拼命尝试创建一个最小运行项目,但所需的类数量不断增加,使我担心我暴露了敏感的公司数据