因此,我有几个读取或写入MySql数据库的单元测试。我首先使用new DbContextOptionsBuilder<Context>().UseInMemoryDatabase
在内存中创建了一个数据库。那很好。
但是,我需要一些MySQL Json columns,而InMemoryDatabase
不支持那些(例如:public System.JsonObject<object> EventData { get; set; }
)。由于它们似乎特定于MySQL。
所以我想,我需要在一个真实的MySQL数据库上进行测试,但是我遇到了一些麻烦。
当我创建上下文时,我在MySQL中创建了一个新数据库,并将Migrations推送到该数据库。效果很好:
//First create the schema
var options = new DbContextOptionsBuilder<MyContext>()
.UseMySql(config["ConnectionStrings:MyConnectionString"])
.Options;
_context = new MyContext(options);
_context.Database.ExecuteSqlCommand("CREATE SCHEMA `MySchema`");
//Use the database
options = new DbContextOptionsBuilder<MyContext>()
.UseMySql(config["ConnectionStrings:MyConnectionString"] + ";database=MySchema")
.Options;
_context = new MyContext(options);
//Add migrations
_context.Database.Migrate();
问题是:
所以我可以为每个测试创建一个随机的唯一数据库名称,但我怀疑这是否可行。
此外,所有测试完成后如何清理?如果我要使用唯一的数据库名称选项,则可以使用上下文处理方法。但是那应该怎么做?