我正在尝试为使用graphql-dotnet的小型GraphQL服务器编写集成测试。当我使用我的Web应用程序时,服务器工作正常。
要运行集成测试,我尝试使用Microsoft.AspNetCore.TestHost配置服务器并发送POST请求。我也尝试使用Microsoft.EntityFrameworkCore.InMemory来使用内存数据库,而不是使用" real"数据库在本地运行。
我有一个TestStartUp.cs文件,用于设置内存数据库并尝试保存单个记录:
GenerateString
在调用SaveChanges()并确认正在保存对象后,我打印出数据库的内容。但是,当我的存储库对象尝试检索注入的MyDbContext对象中的所有类别时,它会显示没有类别存在。
我尝试了各种配置无济于事。使用不在内存中的数据库可以正常工作,所以我确定我缺少了一些东西。这让我很生气,所以任何帮助都会非常感激!
答案 0 :(得分:1)
为了在少数地方使用InMemoryDatabase,您需要每次都提供相同的数据库选项(使用相同的数据库)。看看下面:
protected DbContextOptions<BackofficeContext> GetDbContextOptions()
{
return new DbContextOptionsBuilder<BackofficeContext>().UseInMemoryDatabase(NAME_OF_YOUR_IN_MEMORY_DATABASE).Options;
}
然后你可以这样做:
var databaseOptions = GetDbContextOptions();
using (var context = new MyContext(databaseOptions))
{
//Add some data to the database
context.SaveChanges();
}
using (var context = new MyContext(databaseOptions))
{
//Recieve data from the database
}