【问题标题】:Implementing Unit Testing with EF Entry?使用 EF Entry 实现单元测试?
【发布时间】:2014-11-19 12:58:39
【问题描述】:

我在 Entity Framework Code First 中实施单元测试时遇到问题。我一直在使用这个 Microsoft 博客 http://msdn.microsoft.com/en-us/data/dn314431.aspx 作为指导,我已经设法完美地实现了一切,并且操作(插入、查询)作为 示例中指定。我有一个问题,但是,更新操作。我的方法包含以下行:

ctx.Entry(ws).Property(w => w.IsDeleted).IsModified = true;

这负责将属性标记为已修改。问题是我的上下文不支持作为 DbEntityEntry 一部分的 Entry 方法的实现,并且不知道如何模拟我的测试方法的更新。

我正在使用 Rhino Mocks 进行测试。

【问题讨论】:

  • 也许您需要将 ctx 转换为 DbEntityEntry?像这样:((DbEntityEntry)ctx).Entry(ws)...等
  • 我的问题是在新的上下文中实现
  • 欢迎来到 SO。与其要求人们阅读链接的教程,不如将链接中的相关信息粘贴到您的问题中。否则,除非有人点击并自己找到所有相关信息,否则这个问题没有意义。让它变得更容易,你会有更好的运气。

标签: c# entity-framework-6 rhino-mocks


【解决方案1】:

在这个问题上有点挣扎。对我来说最好的解决方案是提高间接级别(来自this thread on SO 的回答)。 思路如下:

ctx.Entry(ws).Property(w => w.IsDeleted).IsModified = true;

转换为如下调用:

ctx.SetModified(ws);

...
// Real context implementation
public void SetModified(object entity)
{
    this.Entry(entity).State = System.Data.Entity.EntityState.Modified;
}

你可以做任何你需要在你的模拟实现中“更新”实体的事情。祝您单元测试 EF 代码好运;)

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多