我正在做一个小型实践项目来提高我的单元测试技能。我正在使用实体框架代码优先。
我正在使用 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(使用前将#替换为@)