在单元测试中重用InMemoryDatabase

时间:2016-07-23 23:11:30

标签: c# unit-testing asp.net-core-mvc in-memory-database

我有ASP.NET MVC Core应用程序,我正在编写单元测试。我正在使用InMemoryDatabase,它运行良好。我想为测试运行初始化一次数据库。所以,我有一个静态类:

public static class DbInitialize {
    private static MyDbContext _db;

    public static MyDbContext Initialize() {
        if (_db != null) {
            return _db;
        }
        DbContextOptionsBuilder<MyDbContext> optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
        optionsBuilder.UseInMemoryDatabase();
        _db = new MyDbContext(optionsBuilder.Options);
       ....... (populating mock data) .............
       _db.SaveChanges();
       return _db;
    }
}

适用于单个测试类(例如HomeControllerTests)及其所有特定测试。但是,如果我有另一个测试类(CustomerControllerTests)并且我调用DbInitialize.Initialize() - 我看到_db为空,但数据库没有被销毁 - 我在{{1 }}。有没有更好的方法来初始化数据库只有一次,并获得一个&#34;连接字符串&#34; (因为缺少更好的词)如果它已经启动并运行了吗?

1 个答案:

答案 0 :(得分:0)

事实证明,xUnit正是这种情况的答案 - Collection Fixture。我按照那里的指示,然后就解决了。希望它也可以帮助其他人:)