Когда я впервые запустил тест, все прошло гладко, и мне был возвращен результат 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
Мобильная версия