xUnit
和Microsoft.AspNetCore.TestHost.TestServer
来设置集成测试,并针对在ASP.NET Core 2.2上运行的Web API运行测试。我们的Web API是单一代码库,根据某些配置或应用程序设置差异(如国家、货币等)将分别部署多次。
下面的图表试图解释我们的部署设置:
![enter image description here](https://istack.dev59.com/LZnVH.webp)
对于部署和,API端点、请求和响应完全相同。因此,在针对每个部署进行集成测试时,我们希望避免重复。
以下是说明我们当前测试设置的示例代码:
TestStartup.cs
public class TestStartup : IStartup
{
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false)
.AddEnvironmentVariables()
.Build();
services.AddMvc()
.SetCompatibilityVersion(version: CompatibilityVersion.Version_2_2);
// Code to add required services based on configuration
return services.BuildServiceProvider();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
// Code to configure test Startup
}
}
TestServerFixture.cs
public class TestServerFixture
{
public TestServerFixture()
{
var builder = new WebHostBuilder().ConfigureServices(services =>
{
services.AddSingleton<IStartup>(new TestStartup());
});
var server = new TestServer(builder);
Client = server.CreateClient();
}
public HttpClient Client { get; private set; }
}
MyTest.cs
public class MyTest : IClassFixture<TestServerFixture>
{
private readonly TestServerFixture _fixture;
public MyTest(TestServerFixture fixture)
{
_fixture = fixture;
}
[Fact]
public void ItShouldExecuteTwice_AgainstTwoSeparateConfigurations()
{
//...
}
}
现在,我想要在Visual Studio中的
MyTest
类中多次运行ItShouldExecuteTwice_AgainstTwoSeparateConfigurations
测试,并针对两个不同的配置/应用程序设置或者换句话说是针对Visual Studio中的两个不同测试部署。
我知道,可以通过构建配置的组合(如
DEBUG_SETTING1
,DEBUG_SETTING2
)和预处理指令(#if DEBUG_SETTING1
)来实现这一点。另一个选项是创建一个基本的测试助手项目,包含常见方法,以及为每个部署创建单独的集成项目。
是否有更好、更优雅的方法来实现这个目标呢?