使用Sqlite作为内存数据库进行EF Core单元测试

在《EF单元测试中内存数据库的局限性》译文中,曾经指出Sqlite作为内存数据库进行单元测试的局限性,但随着技术的发展,Sqlite作为内存数据库对EF Core进行单元测试已经变得比较方便。在单元测试中,我们可以使用下面代码创建依赖注入服务:

internal static IServiceProvider GetServiceProvider(IConfiguration Configuration)
        {

            var services = new ServiceCollection();

            services.AddEntityFrameworkSqlServer().AddDbContext(option =>
            {
                option.UseSqlite(CreateInMemoryDatabase());
            });
            var serviceProvider= services.BuildServiceProvider(); ;
            return serviceProvider;
        }

        private static DbConnection CreateInMemoryDatabase()
        {
            var connection = new SqliteConnection("Filename=:memory:");
            connection.Open();
            return connection;
        }

       public static MyDbContext GetDbContext(IServiceProvider provider)
        {
            return provider.GetService(typeof(MyDbContext)) as MyDbContext;

        }

然后,在单元测试中,我们可以使用myDbContext.Database.EnsureCreated(); 创建数据库中的表,这样就可以很方便地进行单元测试了。

你可能感兴趣的:(使用Sqlite作为内存数据库进行EF Core单元测试)