asp.net net 6中IClassFixture〈WebApplicationFactory>的集成测试替代方案是什么< Startup>?

egdjgwm8  于 2023-01-18  发布在  .NET
关注(0)|答案(2)|浏览(135)

我 在.net core 3中看到IClassFixture用于集成测试,现在我想为一个项目编写一个集成测试,该项目是.et6,我应该使用什么来代替.net 6中的IClassFixture用于集成测试?
下面是我的尝试:

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);
    }
}

这里我得到这个错误:

nhhxz33t

nhhxz33t1#

我通过更改我的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

7vux5j2d

7vux5j2d2#

您可以在.Net的所有版本中使用IClassFixture
我认为你的错误来自Program.cs,把你的代码放在这里可以帮助你。

相关问题