gpt4 book ai didi

c# - moqing整个Context时如何关联DBSets?

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:40 27 4
gpt4 key购买 nike

使用 Rowan Miller 提供的 EntityFramework.Testing.Moq 存储库。我正在尝试模拟整个 EF6 上下文,包括所有 DBSet 的模拟实例。每个 DBSet 的数据都从外部源加载到模型实体列表中。

目标是模拟一个 Context 对象,该对象可以在解决方案中的多个(最好是所有)单元测试中重复使用。下面是我的初始上下文设置的简化示例:

Mock<MyContext> context = new Mock<MyContext>();

context.Setup(c => c.Entity1).Returns(LoadEntities<Entity1>().Object);
context.Setup(c => c.Entity2).Returns(LoadEntities<Entity2>().Object);
context.Setup(c => c.Entity3).Returns(LoadEntities<Entity3>().Object);

这将为每个模型实体类型设置 DBSet。 “LoadEntities()”是一种返回 MockDbSet 的通用方法。

模拟数据在查询单个 DBSet 时工作正常,但如果一个实体包含另一个实体的集合,则该集合始终为空!

有没有办法在设置模拟上下文时“关联”两个 DBSet?

(基本信息:我正在使用模型优先方法)

最佳答案

我不建议直接模拟 dbcontext。你不应该像这里描述的那样 mock 别人: http://aspiringcraftsman.com/2012/04/01/tdd-best-practices-dont-mock-others/

我会将所有 ef 代码放在接口(interface)后面并模拟它们。例如,您可以实现存储库模式或工作单元模式。这是一篇不错的文章: http://blog.gauffin.org/2013/01/repository-pattern-done-right/

然后您可以使用集成测试来测试您的存储库/UoW。

我知道这不会直接回答您的问题,但可能会引导您找到不需要答案的解决方案。

祝你好运

关于c# - moqing整个Context时如何关联DBSets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com