【问题标题】:What is Alternative of IClassFixture<WebApplicationFactory<Startup>> in .net 6 for IntegrationTests?.net 6 中用于 IntegrationTests 的 IClassFixture<WebApplicationFactory<Startup>> 的替代方案是什么?
【发布时间】:2023-01-16 21:48:16
【问题描述】:

我在 .net core 3 中看到 IClassFixture<WebApplicationFactory> 用于 IntegrationTests,现在我想为 .et6 项目编写集成测试,我应该使用什么代替 .net 6 中的 IClassFixture<WebApplicationFactory> 用于 IntegrationTests?

这是我尝试过的:

public class TicketControllerTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly HttpClient _client;
    public TicketControllerTests(WebApplicationFactory<Program> factory)
    {
        _client = factory.CreateDefaultClient();
    }

    [Fact]
    public async Task Get()
    {
        var response = await _client.GetAsync("/Tickets/Test");

        //Assert
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
    }
}

在这里我得到这个错误:

【问题讨论】:

标签: c# asp.net asp.net-core integration-testing xunit


【解决方案1】:

我通过更改 program.cs 解决了这个问题。首先,我在我的 api 中将此代码添加为 ProgramBuilder:

public class ProgramBuilder
{
    public static IHostBuilder CreateHostBuilder<T>(params string[] args)
    where T : Startup
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(defaults => defaults.UseStartup<T>());
    }
}

然后在我的 program.cs 中添加以下代码:

var myHost = ProgramBuilder.CreateHostBuilder<Startup>(args).Build();
    myHost.Run();

我使用了这个链接,它对我帮助很大: https://github.com/dotnet/aspnetcore/issues/40361

【讨论】:

    【解决方案2】:

    您可以在.Net的所有版本中使用IClassFixture

    我认为您的错误来自Program.cs,请将您的代码放在这里以帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2021-11-13
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多