是否可以存根实体框架上下文和类来测试数据访问层?

2024-05-13

我熟悉用于测试 ASP .NET MVC 应用程序中的控制器和业务逻辑的技术。

我们的应用程序中的数据访问集中在松散耦合的特殊服务中,使用接口并通过实体框架与实际数据库一起使用。

然而,随着 DAL 变得越来越复杂,隐藏数据库实现细节并为应用程序代码提供抽象,我们开始担心是否能够通过任何方式对其进行测试。因为它已经与 EF 上下文紧密绑定,所以我们不打算引入另一个存储库样式层,但这也意味着我们不能仅使用虚假数据对其进行单元测试。

我在想是否可以以某种方式模拟或存根实体框架对象上下文,同时能够执行添加/删除实体和进行查询等简单操作.

我也在寻找关于这是否是一个好主意(也许真的很糟糕)的意见,如果不是,一些“智能”数据层测试建议。


如果您使用的话,模拟/存根 EF 是部分可能的IObjectSet以及派生的自定义接口ObjectContext实例和所有 EF 相关代码将仅通过这些接口访问 EF 功能(将注入上下文)。所有其他 EF 相关功能都必须隐藏在对象上下文接口上公开的方法中。

我在几个答案中讨论过(例如here https://stackoverflow.com/questions/5609508/asp-net-mvc3-and-entity-framework-code-first-architecture/5610685#5610685 and here https://stackoverflow.com/questions/5488313/organizationally-where-should-i-put-common-queries-when-using-entity-framework-c/5488947#5488947)这确实没有帮助,因为您没有测试真正的代码。非常大的问题是,一旦您模拟/存根 EF 代码,您就会将 linq-to-entities 替换为 linq-to-objects。另一个问题是您正在失去持久实体的引用完整性。因此,我认为 DAL、持久性和查询应该包含在使用真实 EF 和真实 DB 的集成测试中。

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

是否可以存根实体框架上下文和类来测试数据访问层? 的相关文章

  • 无法测试通过 NSubstitute 接收的 ILogger

    我有一个 Net Core 3 应用程序 并尝试在我的方法中测试对 ILogger 的调用 public class MyClass private readonly ILogger
  • 如何获取Azure DevOps Pipelines中变量的单元测试结果?

    我在 Azure DevOps 中有一个构建管道 并且正在使用 NET Core 任务来应用单元测试 我需要获取变量中单元测试的结果 例如 如果有 10 个测试用例 其中两个失败 我需要得到如下信息 failedTestCases 2 su
  • 如何在Android模拟器相机中模拟图片?

    有没有办法将模拟器相机拍摄的照片设置为静态图片 我想在模拟器上使用 zxing 条形码阅读器测试 ir 如果您在 Linux 上运行模拟器 您可以使用 v4l2loopback 和 gstreamer 创建一个显示图像 例如 QRcode
  • Python 模拟中的模拟属性?

    我使用起来相当困难mock在Python中 def method under test r requests post http localhost post print r ok prints
  • 使用单元测试项目中定义的 Startup 类时.NET Core TestServer 返回 404

    我有一个基本的 net core api web 应用程序和一个使用 TestServer 发出 http 请求的单元测试项目 我有一个 TestStartup 类 它是 api 项目中 Startup 类的子类 如果 Startup 类位
  • 如何模拟 typeorm 连接

    在集成测试中 我使用以下代码片段来创建连接 import Connection createConnection from typeorm ts ignore import options from ormconfig js export
  • 如何知道您的单元测试装置是否“尺寸合适”?

    您如何知道 测试夹具 的尺寸是否合适 我所说的 测试夹具 是指一个包含大量测试的类 我在测试装置中一直注意到的一件事是它们变得有点冗长 鉴于它们也可能不够详细 您如何了解单元测试的大小是否合适 我的假设是 至少在 Web 开发的背景下 您应
  • 使用原始类型模拟案例类

    考虑以下类型结构 trait HasId T def id T case class Entity id Long extends HasId Long 比方说 我们想在一些测试中模拟实体类 val entityMock mock Enti
  • PowerMock + Mockito VS 单独 Mockito

    谁能总结一下 到底有哪些功能可以让您在 Mockito 之上添加 PowerMock 到目前为止我已经找到了这些 模拟静态 最终和私有方法 删除静态初始化器 允许在没有依赖注入的情况下进行模拟 我不清楚这一点 你能详细说明一下吗 它还添加其
  • UnitTest HttpResponse WriteAsync 和 CopyToAsync

    我想对下一个方法进行单元测试 public static async Task SetResponseBody HttpResponse response string message var originalResponseBody re
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • 如何模拟@PrePersist方法?

    如何模拟 PrePersist 方法 例如我实例化的实体的 preInit 我正在使用 TestNG EasyMock 是首选 Test enabled true public void testCreateOrder Instantiat
  • 包括过滤器子集合[重复]

    这个问题在这里已经有答案了 我在为 LINQ 查询中包含的项目添加一些过滤条件时遇到一些困难 我的查询就像 var item Context Order Include Inner Include Inner first Include I
  • 如何对嵌套函数进行单元测试? [复制]

    这个问题在这里已经有答案了 您将如何对嵌套函数进行单元测试f1 在下面的例子中 def f def f1 return 1 return 2 或者需要测试的函数不应该嵌套吗 有一个类似的问题这个链接 https stackoverflow
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 不支持 EF6 上下文类型“System.Data.Entity.Core.Objects.ObjectContext”

    我有一个使用 Visual Studio 2013 和 ADO NET 实体数据模型 EF6 创建的新项目 现在我必须使用一些动态数据函数 例如访问 MetaTable 对象 所以我添加以下代码 MetaModel model new Me
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • EF 4.1 加载过滤的子集合不适用于多对多

    我一直在看显式加载相关实体时应用过滤器 http blogs msdn com b adonet archive 2011 01 31 using dbcontext in ef feature ctp5 part 6 loading re

随机推荐