如何获取我提供给已测试应用程序的内存数据库副本?
我希望能够测试具有副作用的控制器实际上是否具有这些作用。例如:double
。
我想检查一个名称为AddNewFoo?name=bar
的{{1}}是否实际上已添加到数据库中。
我将跟着Microsoft的文章一起发布在底部,该文章指导如何使用.Net Core Asp MVC应用程序设置xunit。在那篇文章中,它们覆盖了MVC的启动功能,并为您提供了将服务换成模拟的机会。我的大多数服务都是相同的,因为我实际上想测试这些服务。但是,我试图使他们的数据库示例正常运行,而且这在大多数情况下是可行的,但是我觉得他们没有提供关键的细节。他们这样设置数据库:
Foo
这很好。我所有的测试都通过了没有副作用的控制器,例如Bar
。但是,为了测试具有副作用的控制器,我希望能够
services.AddDbContext<MyDbContext>(options =>
{
options.UseInMemoryDatabase("InMemoryDbForTesting");
options.UseInternalServiceProvider(serviceProvider);
});
// Build the service provider.
var sp = services.BuildServiceProvider();
// Create a scope to obtain a reference to the database
// context (ApplicationDbContext).
using (var scope = sp.CreateScope())
{
var scopedServices = scope.ServiceProvider;
var db = scopedServices.GetRequiredService<MyDbContext>();
db.Database.EnsureCreated();
// Seed the database with test data.
DbInitializer.InitializeDbForTests(db);
}
问题是:如何获得合适的myDbContext。
我尝试注入它,但是GetFoos
阻止了我向构造函数添加参数。即使可以,也可能没有依赖注入。
https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2