将服务注入xunit测试

时间:2019-04-19 18:16:18

标签: c# asp.net-core xunit.net

如何获取我提供给已测试应用程序的内存数据库副本?

我希望能够测试具有副作用的控制器实际上是否具有这些作用。例如: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

0 个答案:

没有答案