EF 6.1如何交换迁移配置进行测试?

时间:2015-06-19 13:37:12

标签: c# .net entity-framework entity-framework-6 ef-migrations

我正在尝试使用EF 6.1进行集成测试,并遇到一个问题,即在我不需要的情况下使用我的迁移配置设置。我无法弄清楚如何将它们换成测试。 这是我的测试类:

[TestClass]
public class SXSeasonConverterTests
{
    public void RecreateDatabaseForTesting()
    {
        Database.SetInitializer(new TestDatabaseSeedingInitializer());
        using (var context = new BaseNFLContext("NFLContextIntegrationTests"))
        {
            context.Database.Initialize(true);
        }
    }

    public SXSeasonConverterTests()
    {
        RecreateDatabaseForTesting();
    }
}

这是我的初始化程序类:

public class TestDatabaseSeedingInitializer : DropCreateDatabaseAlways<BaseNFLContext>
{
    protected override void Seed(BaseNFLContext context)
    {
        //Add Teams
        context.Teams.Add(new Team { Code = "ARZ", Name = "Arizona Cardinals" });
        context.Teams.Add(new Team { Code = "ATL", Name = "Atlanta Falcons" });
        ...
    }
}

但是当我尝试运行测试时,我收到了我的AutomaticMigrations被禁用的错误。当我进一步观察时,我发现它在Initialize上使用了这段代码:

internal sealed class NFLConfiguration : DbMigrationsConfiguration<BaseNFLContext>
{
    public NFLConfiguration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
    }
}

此代码显然适用于生产。但是,在进行测试时,如何交换这些迁移配置并设置AutomaticMigrationsEnabled = true;

2 个答案:

答案 0 :(得分:0)

我曾经使用一个特殊的单元测试数据库测试我的EF东西,并在一个在测试结束时回滚的TransactionScope中执行测试。这样,数据库中实际上没有存储任何数据。

我并不快,但它符合我们的目的。

答案 1 :(得分:0)

您应该创建一个单独的项目进行测试,并拥有一个指向测试数据库的单独Db上下文。您可以创建类似IDbContext接口的东西,告诉您需要测试哪些对象模型。此外,数据访问层需要允许您将此测试Db上下文作为依赖项注入。