c# - 模拟 DbContext 条目

标签 c# entity-framework testing

我正在测试一个包含这段代码的函数:

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

  // [...]
}

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

有什么解决办法吗?

最佳答案

您可以使用 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();

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

关于c# - 模拟 DbContext 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809048/

相关文章:

c# - CLR 中的错​​误? CLR 执行引擎失败

Firefox 3.6 更新破坏了 selenium

java - Akka-testkit "future.isCompleted"检查

angular - 如何为包含带 Angular 路由器的组件设置测试?

sql-server - Async/Await 片段在以 MS-SQL-Server 为目标时发生死锁(如预期),但在以 Oracle 为目标时不会死锁(意外)

C#拦截/改变/重定向一个方法

c# - 如何反转 .ToString() 调用

c# - 迭代 XML 节点

php - 语义错误 - 找不到常量 X,类...错误

c# - 如何添加没有相关实体但保存关系的实体?