存储库本身通常不经过测试?

2024-05-02

抱歉,我对存储库模式、单元测试和 orm 工具还不熟悉。

我一直在研究单元测试和存储库模式,并得出一些结论,我想知道我是否正确。

存储库模式有助于在使用它的控制器中替换单元测试,例如,对吧?因为创建上下文(在 EF 中)或会话(在 NH 中)的存根/伪造比较困难,对吧?存储库本身没有经过测试?为什么?

使用 EntityFramework 或 NHibernate 与存储库模式,如果我想测试我的存储库,我需要进行集成测试吗?因为如果我使用上下文/会话的假实现,我就不会进行真正的测试?因为上下文/会话本身就是存储库(我的意思是它们实现了添加、删除、编辑、GetById、GetAll 等真正的逻辑)?

带有 EF 或 NH 的存储库模式就像一个包装器? (不仅仅是一个包装器,我知道这是域的一个重要概念。)


存储库 http://domaindrivendesign.org/node/123接口属于领域层。但实现属于基础设施或数据访问层。此实现通常未经测试unit测试。它大量使用 ORM API,因此单独测试存储库非常困难且浪费。此问题并非特定于存储库:不要嘲笑你不拥有的类型。 http://www.davesquared.net/2011/04/dont-mock-types-you-dont-own.html

存储库应该进行测试一体化使用真正的 ORM 进行测试。在记忆中 http://ayende.com/blog/3983/nhibernate-unit-testing数据库是一个非常popular http://devlicio.us/blogs/krzysztof_kozmic/archive/2009/08/14/testing-with-nhibernate-and-sqlite.aspx解决这个问题的方法。

...因为如果我使用假货 我的上下文/会话的实现我没有进行真正的测试?

即使你设法做到了(我真的怀疑 NHibernate 的情况),你也会浪费时间。会话/上下文接口不受您的控制,您的测试只会重申您对真实事物如何工作的猜测。

因为上下文/会话本身就是存储库?

否。 Context/Session 是以下的实现工作单元 https://stackoverflow.com/questions/6941573/repository-vs-unitofwork/6941746#6941746图案。它不是您的域的一部分。这是基础设施。

带有 EF 或 NH 的存储库模式就像一个包装器?

存储库是重要的领域概念,它不仅仅是一个“包装器”。就像您的应用程序不是数据库的“包装器”一样。我认为DDD存储库接口定义应该基于无处不在的语言 http://domaindrivendesign.org/node/132尽可能多,并且不应包含任何 ORM 相关的单词或类型。

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

存储库本身通常不经过测试? 的相关文章

  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 有条件地忽略 JUnit 4 中的测试

    好的 所以 Ignore注释适合标记不应运行的测试用例 但是 有时我想忽略基于运行时信息的测试 例如 如果我有一个并发测试 需要在具有一定数量核心的计算机上运行 如果这个测试在单处理器机器上运行 我认为仅仅通过测试是不正确的 因为它还没有运
  • 是否可以修改 PDF 表单字段名称?

    情况是这样的 我有一个 PDF 其中包含自动生成的 pdf 表单字段名称 问题是这些名称不太用户友好 它们看起来像 topmostSubform 0 Page1 0 Website Address 0 我希望能够更改它们 使它们类似于 We
  • 在C#中的某个单词之后/之前过滤字符串中的值

    我有很长的字符串 它们是 IMAP 请求的响应 我想从中提取一些值 它通常的格式类似于 x someword 或 someword x 如何获取某个单词 已知 的x 它可以超过一位数字 响应的每一 行 如下所示 x someword r n
  • 我可以将 SimpleInjectors 诊断结果写入日志文件吗?

    在调用中使用简单注入器container Verify 在我的配置结束时 并在调试器中获取诊断信息 如中所述文档 http simpleinjector codeplex com wikipage title Diagnostics 我想将
  • 编译器值类型解析和硬编码“0”整数值

    首先 介绍一些背景知识 阅读问题并接受答案发布在这里 https stackoverflow com questions 8352260 why does the sqlparameter name value constructor tr
  • 限制对记录的访问。基于声明的权限是个好主意吗

    在 net 基于声明的身份框架中 如果我想限制用户对某个帐户 特定帐户 123456 执行操作 查看或编辑 我说的是商业实体 例如银行帐户 创建索赔是个好主意吗对于他们可以查看或编辑的每个帐户 一组中有很多索赔有什么缺点吗 系统管理员可能有
  • 如何在没有互联网连接的情况下安装 NuGet 包?

    目前我正在一台不允许访问互联网的虚拟电脑上进行开发 我设法获取 NuGet Tools vsix 将 NuGet 添加到 Visual Studio 2010 但似乎无法找出如何离线部署 NuGet 包 例如 我下载了EntityFrame
  • Python 是否有首选的 BDD 风格单元测试框架?

    我想知道是否有任何 BDD 风格的 描述它 Python 单元测试框架可以维护并准备好投入生产 我已经发现describe https pypi python org pypi describe 0 1 2 但似乎没有维护 也没有文档 我也
  • 为什么即使当我尝试从工作线程更改 UI 时,同步上下文仍为空?为什么即使我不这样做,工作线程也会在 UI 线程上等待?

    我在表单上有一个按钮 点击它我调用FooAsync并在完成时阻止 UI 线程 下面是代码和我的问题 using System using System Diagnostics using System Threading using Sys
  • 如何在Web网格的列中编写IF条件

    我在 WEB GRID 列中创建 if 条件时遇到错误 所以 请帮助改进我的代码并解决我的问题 grid Column Status format item gt
  • WPF Datagrid 循环/选择具有特定属性的单元格

    全新的 WPF 对 WinForms 非常熟悉 这可能会让过渡变得更加困难 我正在尝试将旧 WinForms 项目中的一些功能移植到 WPF 中作为学习体验 目标是在 DataGrid 中查找与 TextBox 中的字符串匹配的单元格值 我
  • 如何判断一个引用的对象是否可以删除?

    我有一个名为 Customer 的对象 它将在其他表中用作外键 问题是我想知道是否可以删除 客户 即 它没有在任何其他表中引用 Nhibernate 可以做到这一点吗 你所要求的是找到的存在CustomerPK值在引用表FK列中 有很多方法
  • 删除 TableLayoutPanel 中的特定行

    我有 TableLayoutPanel 我以编程方式添加行 用户基本上选择一个属性 然后与一些控件一起显示在表中 我想我在这里有一个一般性的理解问题 我会尽力解释它 每行中的控件之一是 删除 按钮 该按钮应该删除它所在的行 我所做的是将事件
  • 模拟对象 - 将所有方法声明为虚拟方法还是使用接口?

    与 Java 不同 net 中的方法默认不是虚拟的 为了使用大多数模拟对象框架 您要么必须将要在模拟上使用的方法标记为 真实 对象上的虚拟方法 要么必须有一个可以模拟被测试类将使用的接口接受代替执行 将每个方法标记为虚拟似乎是一种不好的形式
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data

随机推荐