技术:.Net Core,Sqlite内存,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内存数据库的作用域限定为一种测试方法?
谢谢。