Невозможно использовать пользовательский запуск для проекта интеграции .NET 8.C#

Место общения программистов C#
Anonymous
Невозможно использовать пользовательский запуск для проекта интеграции .NET 8.

Сообщение Anonymous »

У меня есть проект веб-API ASP.NET Core, который я обновляю и теперь работает на .NET 8.
Я планирую включить в проект интеграционный тест с помощью xUnit.
Теперь, поскольку в более ранней версии у меня всегда был файл Startup.cs, я придерживаюсь плана сохранения того же подхода.
Я хочу использовать класс TestStartup.cs для моего интеграционного теста, чтобы управлять всеми внешними зависимостями и внедрять их в качестве макета.
Проблема в том, что я использую TestStartup.cs при запуске и тестировании контроллера я получаю 404 для конечной точки.
Все работает нормально, когда я указываю на настоящий Startup.cs.
Оба файла Startup.cs и TestStartup.cs имеют одинаковый код, отличающийся только внедрением фиктивных зависимостей.
Вот как мой program.cs< /code> выглядит
public static void Main(string[] args)
{
MyHost.Start(args);
}

public static class MyHost
{
public static void Start(string[] args, ....) where TStartup: class
{
CreateWebHostBuilder(args ,......)
.Build().Run();
}

private static IWebHostBuilder CreateWebHostBuilder(string[] args, ...) where TStartup :
class => {
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(....)
.ConfigureAppConfiguration(...);
}
}

Вот как выглядит мой стартап:
public class Startup
{
public void ConfigureService(IserviceCollection services)
{
// ....
}

public void Configure(IApplicationBuidler app, IWebHostEnvironment env)
{
// ....
}
}

Мой TestStartUp.cs — это точная копия, в которой лишь несколько служб зарегистрированы в фиктивной реализации. Не допускайте никаких изменений.
Вот как у меня есть настройка customWebApplicationFactory для моего теста.
public class CustomApplicationFactory: WebApplicationFactory // When I replace it with Startup this works
{
protected override IWebHostBuilder CreateWebHostBuilder()
{
return WebHost.VreateDefaultBuilder()
.UseStartup() // When I replace it with Startup this works
.ConfigureLogging()
.ConfigureAppConfiguration();
}
}

И наконец, это мой тест
public class MyTest
{
private readonly HttpClient _client;
private readonly CustomApplicationFactory _factory;

public MyTest()
{
_client = _factory.CreateClient()
}

[Fact]
public async Task MyTestMethod()
{
// code for preparing/sending request using _client and some assertion
// which works perfectly fine when pointed to Startup.cs but when
// pointed to TestStartup.cs gives my 404(the controller method has no
// hit.)
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... on-project

Вернуться в «C#»