Технологии: .Net Core, Sqlite Inmemory, C #, Xunit
Я пытаюсь использовать Sqlite Inmemory Provider для моделирования базы данных с помощью Xunit.Я хочу иметь свежий магазин (набор текстовых данных) при каждом выполнении теста.Однако кажется, что Store разделяет несколько методов тестирования, поэтому я получаю аномалии с результатами теста.
Вот мой код.Я создаю новое соединение Sqlite с каждым выполнением теста и удаляю его в конце.Нет никакой разницы, является ли выполнение теста эквивалентным и параллельным.
[Theory]
[InlineData(1)]
[InlineData(3)]
public async Task WhenPassingValidId_ReturnRecord(int id)
{
using (var connection = new SqliteConnection("DataSource=:memory:"))
{
connection.Open();
var options = DbHelper.GetSqliteContextOptions(connection);
using (IDataContext context = new DataContext(options))
{
await SetupTestDataAsync(context);
}
using (IDataContext context = new DataContext(options))
{
var service = new LookupService(context);
var lookup = await service.GetAsync(id);
Assert.NotNull(lookup);
}
}
}
private async static Task SetupTestDataAsync(IDataContext context)
{
context.LookupHeaders.AddRange(GetLookupHeaders());
await context.SaveChangesAsync();
context.Lookups.AddRange(GetLookups());
await context.SaveChangesAsync();
}
public static DbContextOptions<DataContext> GetSqliteContextOptions(SqliteConnection connection)
{
var options = new DbContextOptionsBuilder<DataContext>()
.UseSqlite(connection)
.Options;
using (var context = new DataContext(options, CreateRequestContext()))
{
context.Database.EnsureCreated();
}
return options;
}
Есть ли способ использовать базу данных Sqlite In-memory для одного метода тестирования?
Спасибо.