Тест интеграции с WebApplicationFactory завершается неудачей с ObjectDisposeException для IServiceProviderC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Тест интеграции с WebApplicationFactory завершается неудачей с ObjectDisposeException для IServiceProvider

Сообщение Anonymous »

У меня есть простой тест для проверки работоспособности, который выглядит следующим образом:

Код: Выделить всё

public class HealthCheckEndpointTests : IClassFixture
{
private readonly ItemsApplicationFactory _factory;

public HealthCheckEndpointTests(ItemsApplicationFactory factory)
{
_factory = factory;
}

public async Task HealthCheck_Test()
{
// Arrange
HttpClient httpClient = _factory.CreateClient();

// Act
string response = await httpClient.GetStringAsync("/health/live");

// Assert
Assert.Equal("Healthy", response);
}
}
Моя ItemsApplicationFactory выглядит следующим образом:

Код: Выделить всё

public class ItemsApplicationFactory : WebApplicationFactory
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureKestrel(options => options.AllowSynchronousIO = true);

builder.ConfigureServices(services =>
{
// remove db context options if exists
var dbContextDescriptor = services.SingleOrDefault(d => d.ServiceType == typeof(DbContextOptions));
if (dbContextDescriptor != null)
services.Remove(dbContextDescriptor);

var serviceCollection = new ServiceCollection()
.AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();

services.AddDbContext(mariaDb =>
{
mariaDb.UseInMemoryDatabase("template");
mariaDb.UseInternalServiceProvider(serviceCollection);
});
});
}
}
Когда я запускаю тест, я получаю следующее исключение

Код: Выделить всё

System.ObjectDisposedException : Cannot access a disposed object.
Object name: 'IServiceProvider'
Я изменил свой тест, чтобы проверить, вызвано ли исключение инициализацией ItemsApplicationFactory или HttpClient. Итак, тест выглядит так

Код: Выделить всё

public class HealthCheckEndpointTests : IClassFixture
{
private readonly ItemsApplicationFactory _factory;

public HealthCheckEndpointTests(ItemsApplicationFactory factory)
{
_factory = factory;
}

public async Task HealthCheck_Test()
{
// Arrange
HttpClient httpClient = _factory.CreateClient();

// Act
await Task.Run(() => Task.CompletedTask);

// Assert
Assert.True(true);
}
}
Тест не выдал никаких исключений.
Почему _factory.CreateClient(); не выдает исключение, но httpClient.GetStringAsync( "/health/live") имеет? И как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/761 ... xception-f
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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