Данные C# в базе данных в памяти сохраняются при различных тестовых запусках.C#

Место общения программистов C#
Ответить
Anonymous
 Данные C# в базе данных в памяти сохраняются при различных тестовых запусках.

Сообщение Anonymous »

Я пишу интеграционный тест для своего API. Я решил использовать базу данных в памяти, однако у меня возникли некоторые проблемы.
Когда я впервые запустил тест, все прошло гладко, и мне был возвращен результат 200 ОК.
Когда я повторно запускаю тест, он терпит неудачу, и я понял, что проблема исправляется сама собой, когда я меняю адрес электронной почты.
С тех пор Я реализовал правильный метод демонтажа, поэтому он уничтожается в конце теста, однако я до сих пор не уверен, почему данные все еще существуют, даже несмотря на то, что WebApplicationFactory создается каждый раз, и у меня есть сервисы.RemoveAll(typeof (AppDbContext)); выполнить перед повторным созданием базы данных в памяти?
Кроме того, разве база данных в памяти не должна существовать только в памяти? Почему данные все еще сохраняются после завершения теста, закрытия Visual Studio и выключения компьютера? Используется ли какой-то механизм кэширования?
Кроме того, я хотел бы указать, что я использовал Dipose() и Dispose правильно, но проблема все еще сохранялась.
Исходный код ниже:

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

    public class IntegrationTest
{
protected readonly HttpClient _testClient;
private readonly WebApplicationFactory
 _appFactory;

protected IntegrationTest()
{
_appFactory = new WebApplicationFactory()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
services.RemoveAll(typeof(AppDbContext));

services.AddDbContext(options =>
{
options.UseInMemoryDatabase("TestDb");
});

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

var sp = services.BuildServiceProvider();

using var scope = sp.CreateScope();

var scopedServices = scope.ServiceProvider;
var db = scopedServices.GetRequiredService();
db.Database.EnsureCreated();
});
});
_testClient = _appFactory.CreateClient();
}

protected async Task AuthenticateAsync()
{
_testClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", await GetBearerTokenAsync());
}

private async Task GetBearerTokenAsync()
{
// Register user
var registerResponse = await _testClient.PostAsJsonAsync("/register", new
{
email = "test@gmail.com",
password = "Passw0rd."
});
registerResponse.EnsureSuccessStatusCode();
Изменено значение адреса электронной почты, поскольку оно вызывало проблему.
Реализовано правильное удаление базы данных для уничтожения базы данных в конце теста.>

Подробнее здесь: https://stackoverflow.com/questions/785 ... -test-runs
Ответить

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

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

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

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

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