entity-framework - 单元测试两种方式的EF关系

标签 entity-framework unit-testing

我正在做一个小练习项目,以提高我的单元测试技能。我正在使用Entity Framework Code First。

我正在使用FakeDBSet,它对于简单的实体列表非常有效。当返回实体树时,情况就不会那么好了。特别是,两种关系之间的关系不被维护,因为这是 Entity Framework 魔术的一部分。

我有两个类:

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

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

如果我将书设置为评论,则该评论不会添加到该书的评论集合中。使用EF时可以使用,但在我的伪造版本中则不可以。

有没有一种方法可以 mock 这种行为,还是我不应该依赖EF来实现两种方式的关系?还是模拟数据上下文只是浪费时间?

最佳答案

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

过去,我通过了解我的模拟的特定限制并确保我以正确的方式来完成我的设置代码,以使代码有意义(这让我们面对现实是不理想的),从而避免了这种情况。这里的另一个选择是在单元测试中使用某种形式的真实轻量级数据库,并继续使用EF。

关于entity-framework - 单元测试两种方式的EF关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918205/

相关文章:

c# - 将 ASP.NET Identity 集成到现有数据库

c# - 为什么 List(T).Contains 无法在 Entity Framework 对象列表中找到匹配项?

C# Entity-Framework : How can I combine a . 查找并包含模型对象?

python - 对 Python Azure 计时器函数进行单元测试

javascript - 类型错误 : parsed is undefined on angularjs service unit test

entity-framework - ASP.NET 动态数据 : How to Specify Sort Order of Items in Dropdown List

asp.net - 使用 Jet 引擎使用 Entity Framework (代码优先)重命名列(并保留数据)

php - PhalconPHP MVC 微应用 : Specify a request path and assert the response code

c++ - 如何为 C++ 项目编写单元测试

node.js - 如何在 Node 中使用 Mocha 和 Chai 测试 Promise 拒绝?