将.Net Core Dependency Injection与测试项目一起使用

时间:2018-06-19 02:22:49

标签: c# .net-core

我试图在MSTest项目中为集成测试配置EntityFramework,通常我可以通过我的启动配置我的项目,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddApplicationInsightsTelemetry(Configuration);

    var defaultConnectionString = Configuration.GetConnectionString("DefaultConnection");

    services.AddEntityFrameworkSqlServer()
        .AddDbContext<AstootContext>(options => 
                options.UseSqlServer(defaultConnectionString))
        .AddDbContext<PublicAstootContext>(options => 
                options.UseSqlServer(defaultConnectionString));
    //...
}

我的测试项目如下:

[TestClass]
public class UnitTest1 : ServiceTestBase
{
    string ConnectionString = @"Data Source=.\SQLEXPRESS;
                      AttachDbFilename=C:\source\Astoot\RestEzCore.Tests\TestDB\NORTHWND.MDF;
                      Integrated Security=True;
                      Connect Timeout=30;
                      User Instance=True";

    [TestInitialize]
    public void RegisterTestModules
    {

    }

    [TestMethod]
    public void TestMethod1()
    {
    }
}

如何重用我的webapi项目使用的相同依赖注入,以便以类似的方式配置我的测试。

1 个答案:

答案 0 :(得分:1)

通常你应该MyWebApp包含MyWebApp.StartupMyWebApp.appsettings.json,启动类配置所有内容(它可能使用json配置文件)。

现在位于MyWebApp.Test(应该引用MyWebApp),如果您需要覆盖某些内容,请创建继承自MyWebApp.Test.Startup的{​​{1}},并MyWebApp.Startup(至MyWebApp.Test.appsettings.json使用不同的配置,例如ConnectionString),然后您可以像这样创建测试服务器:

var builder = WebHost
    .CreateDefaultBuilder()
    .UseStartup<Startup>()  //the Startup can be MyWebApp.Startup if you have nothing to customize
    .ConfigureAppConfiguration(b => b.AddJsonFile("appsettings.json"));

var server = new TestServer(builder);
var client = server.CreateClient();
//send requests via client