模拟DbContext条目

时间:2016-11-25 16:18:47

标签: c# entity-framework testing

我正在测试包含此代码的函数:

void FunctionToTest() {
  if (context.Entry(entity).State == EntityState.Detached)
        {
            // [...]
        }

  // [...]
}

出于这个原因,我创建了自己的测试上下文,但是我无法模拟DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity),因为DbEntityEntry类有一个需要内部类的构造函数。

对此有何解决方案?

1 个答案:

答案 0 :(得分:1)

您可以使用Effort。通过NuGet下载,将此代码添加到您的app.config

<system.data>
<DbProviderFactories>
  <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />
</DbProviderFactories>
</system.data><entityFramework>
<providers>
  <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
</providers>
</entityFramework>

现在,您可以在测试中添加

EffortProviderConfiguration.RegisterProvider();
var connection = DbConnectionFactory.CreateTransient();
var model = new ApplicationDbContext(connection);
model.Database.CreateIfNotExists();

瞧,你有一个虚假的数据库用于测试目的

相关问题