单元测试双向 EF 关系

2024-01-09

我正在做一个小型实践项目来提高我的单元测试技能。我正在使用实体框架代码优先。

我正在使用 FakeDBSet,它非常适合简单的实体列表。当实体树返回时,事情就不太好了。特别是,不会维护两种方式的关系,因为这是实体框架魔法的一部分。

我有两节课:

public class Book
{
    public virtual ICollection<Review> Reviews {get; set;}
}

public class Review
{
    public virtual Book Book { get; set;}
}

如果我将这本书设置为评论,该评论不会添加到该书的评论集合中。使用 EF 时会出现这种情况,但在我的假版本中则不会。

有没有办法模拟这种行为,或者我不应该依赖 EF 来实现双向关系?或者模拟数据上下文只是浪费时间?


这实际上是一个非常常见的问题(并且没有一个很好的答案)。 EF 内部发生一个称为修复的过程,该过程在检测更改循环内运行(在添加/删除和其他一些更改时触发的循环)。这会评估模型中的反向链接。当你开始模拟你的上下文时,你将失去检测更改循环,从而失去修复。

在过去,我通过理解模拟的这个特殊限制并确保我以正确的方式执行我的设置代码以在代码中有意义(让我们面对它是相当不理想的)来解决这个问题。这里的另一个选择是在单元测试中使用某种形式的真正的轻量级数据库并继续使用 EF。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试双向 EF 关系 的相关文章

随机推荐

  • PHP 中如何判断 value 是否为日期

    我正在使用 PHP 中的值数组 其中一些值可能包括各种字符串格式的日期 我需要将多种格式的日期转换为它们的等效数字 Unix 时间戳 问题是能够确定字符串是否是日期 Using if timestamp strtotime str fals
  • Android:加密密码[重复]

    这个问题在这里已经有答案了 可能的重复 存储密码 https stackoverflow com questions 5359399 storing a password 我正在使用共享首选项来存储密码 按原样保存密码数据是否安全 或者我必
  • Three.js 中的渐进式加载/LOD/流网格

    我正在使用 STL 加载器将 stl 文件加载到 Three js 场景中 这些 stl 文件的大小从 5mb 到 50mb 不等 有没有一种方法可以用来在模型加载时逐步加载 流式传输 提高细节级别 不确定术语是否正确 以便我的用户在出现任
  • R 按组总和总结给出 NA

    我有一个像这样的数据框 Observations 2 190 835 Variables 13 patientid
  • Angular 2 自定义复合控件

    我正在尝试为 Angular 2 创建一个自定义复合控件 我的要求是我需要创建一个允许用户选择文件的通用文件选择器控件either使用 html5 输入 类型 文件 or通过输入文件的 url 我决定创建通用表单控件 为两个子控件实现 Co
  • 何时对卷积层使用什么类型的填充?

    我知道当我们在神经网络中使用卷积层时 我们通常使用填充并且主要使用恒定填充 例如零填充 并且有不同类型的填充 例如对称 反射 恒定 但我不确定使用不同填充方法的优点和缺点以及何时使用哪一种 这实际上取决于神经网络的用途的情况 我不会告诉它的
  • Bootstrap 表 - 无法在 tr 上添加点击事件

    我正在使用 Bootstrap 表 http wenzhixin net cn p bootstrap table docs index html http wenzhixin net cn p bootstrap table docs i
  • AOP 围绕外部库的重写方法?

    我正在寻找以下问题的实用解决方案 外部库提供组件作为基类 自定义组件是通过扩展这些基类来创建的 当实现抛出未处理的异常时 基类就会中断 基类源代码不可用 只有一个二进制罐子 我正在寻找的是一个通用的 AOP 错误处理建议 它将包装每个方法的
  • 如何使用 React 前端将 favicon 添加到 django 应用程序

    我正在构建一个带有 React 前端的 Django 应用程序 使用 React create app 构建 我无法让图标出现在生产中 我正在使用 Django 2 10 0 当我构建 React 应用程序时 构建输出文件将放在 asset
  • Visual Studio 2013 与 2010 项目兼容吗?

    VS2012 可以打开 VS2010 项目并使它们处于可在 VS2010 中使用的状态 VS2013有同样的功能吗 如果允许 Visual Studio 自动升级项目 则可以在 Visual Studio 2013 Visual Studi
  • 从 Android 应用程序登录网页

    我正在努力做到这一点 我真的需要有经验的朋友的帮助 带有 2 个文本框的应用程序 一份用于用户名 一份用于密码 登录按钮 当用户按下按钮时 登录信息将发送到网页 m bonbon hr 并在浏览器中打开该网页 首次登录后 登录信息将被保存
  • 找不到接口 java.util.List Rest API Spring boot 的主要或默认构造函数

    我将请求正文传递给邮递员上的 POST 请求 类似于以下内容 name Mars artifacts elements name carbon amount 0 5 measurement g typeName typeA elements
  • 使用 ShouldBeEquivalentTo 并处理不同的名称

    我想做一个映射器测试 将数据库模型映射到 dto 数据库模型中有 class Order long Id 但在 Dto 上 同一个字段被命名为 class OrderDto long OrderId 使用 ShouldBeEquivalen
  • PayPal 和 Parse 冲突

    尝试使用 PayPal iOS SDK 使其能够仅与 Paypal 集成一起工作 但是当我尝试添加任何解析所需的框架 例如 Parse framework Boltz framework 和 ParseFacebookUtils frame
  • 使用宏将 import 语句粘贴到 thunk 前面

    触发于这个问题 https stackoverflow com questions 18535356 multiple late initialisation 我想知道是否可以编写一个 def macro 来实现结果 import scal
  • 对于 OpenXML Excel 文档,MemoryStream 为空

    我通常会使用 ClosedXML 生成 Excel 文件 核心项目迫使我只使用 OpenXML 将下载生成的 Excel 文件 我遇到一个问题 即提供给 SpreadsheetDocument 的内存流为空 我尝试了多种方法来生成流 下面的
  • node.js:在成功验证 get 请求后提供文件(特别是 apk)

    好吧 我正在尝试在成功验证 get 请求后使用 node js 提供 apk 文件 为此 我使用以下形式的 api 调用 GET apk username user token a token goes here 请注意 实际的身份验证是通
  • 使用 Laravel 下订单后减少数据库中的产品数量

    我在网站上有购物车 到目前为止一切正常 现在 我正在尝试为管理员可以在后端添加的每种产品进行数量 已经完成 以及当客户订购产品以减少数据库中的数量时 到目前为止 管理面板已准备就绪 可以向保存在数据库中的产品添加数量 这是我的购物车提交控制
  • 在 Ubuntu 10.04 上编译时未声明 PATH_MAX

    我正在尝试在 Ubuntu 10 04 中为 8 04 编译 C 程序 它失败了 因为我们已经使用了PATH MAX以及其他应该定义的常量limits h 根据各种资源 它应该是 POSIX 兼容 C 库的一部分 这是 Ubuntu 10
  • 单元测试双向 EF 关系

    我正在做一个小型实践项目来提高我的单元测试技能 我正在使用实体框架代码优先 我正在使用 FakeDBSet 它非常适合简单的实体列表 当实体树返回时 事情就不太好了 特别是 不会维护两种方式的关系 因为这是实体框架魔法的一部分 我有两节课