这就是我最终为任何感兴趣的人所做的事情。
我扩展DropCreateDatabaseAlways<TContext>
并覆盖了 Seed 方法,用我的单元测试可以依赖的已知测试数据填充我的数据库。
public class MyDatabaseInitializer : System.Data.Entity.DropCreateDatabaseAlways<MyDbContext>
{
protected override void Seed(MyDbContext context)
{
// Add entities to database.
context.SaveChanges();
}
}
然后我实现了一个[AssemblyInitialize]
设置数据库初始化程序的方法。
[TestClass]
public class Global
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
System.Data.Entity.Database.SetInitializer(new MyDatabaseInitializer());
}
}
这会设置数据库的初始化程序,但不会实际运行它。初始化程序以[TestInitialize]
我编写的方法运行,该方法强制在每次测试之前删除、重新创建和重新植入数据库。
[TestClass]
public class MyTestClass
{
[TestInitialize]
public void TestInitialize()
{
MyDbContext context = new MyDbContext();
context.Database.Initialize(true);
}
[TestMethod]
public void MyUnitTest()
{
Assert.IsTrue(true);
}
}