我正在尝试为我使用GraphQl-dotnet的小型GraphQl Server编写集成测试。当我使用Web应用程序时,服务器正常工作。
要运行集成测试,我正在尝试使用microsoft.aspnetcore.testhost配置服务器并发送邮政请求。我还尝试使用microsoft.entityframeworkcore.inmemory使用内存数据库,而不是本地运行的"真实"数据库。
我有一个设置内存数据库的teststartup.cs文件,并尝试保存单个记录:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<MyDbContext>(options =>
options.UseInMemoryDatabase()
);
...
}
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
MyDbContext myDbContext)
{
myDbContext.Categories.Add(new Category {Id = 1, Name = "Category 1" });
myDbContext.SaveChanges();
app.UseMvc();
}
调用savechanges()后,我已经打印出数据库的内容,并确认对象已保存。但是,当我的存储库对象试图检索注入的myDbContext对象中的所有类别时,它表明不存在类别。
我已经尝试了各种配置。使用不在内存中的数据库工作正常,所以我敢肯定我缺少一些东西。这让我发疯了,所以任何帮助都将不胜感激!
为了在几个地方使用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
}