我是否需要为服务类中仅调用存储库类中的方法的方法编写单元测试?

2024-02-09

Example

我有一个存储库类(DAL):

public class MyRepository : IMyRepository
{
    public void Delete(int itemId)
    {
        // creates a concrete EF context class
        // deletes the object by calling context.DeleteObject()
    }

    // other methods
}

我还有一个服务等级(BLL):

public class MyService
{
    private IMyRepository localRepository;

    public MyService(IMyRepository instance)
    {
        this.localRepository = instance;
    }

    public void Delete(int itemId)
    {
        instance.Delete(itemId);
    }

    // other methods
}

为 MyRepository 创建单元测试比实现它需要更多时间,因为我必须模拟实体框架上下文。

但是为 MyService 创建单元测试似乎是无稽之谈,因为它只调用存储库。我所能检查的就是验证它是否确实调用了存储库删除方法。

Question

您建议如何对这对删除方法进行单元测试。两个都?一?没有任何?你会测试什么?


是的,我肯定会为服务层编写一个单元测试。这样做的原因是,您不仅要测试您的实现现在是否有效,还要测试它将来是否会继续有效。

这是一个需要理解的重要概念。如果后来有人更改了您的 ServiceLayer,并且没有单元测试,您如何验证该功能是否继续工作?

我还会为您的 DAL 编写测试,但我会将它们放在一个名为 DataTests 或其他东西的单独程序集中。此处的目的是跨程序集隔离您的关注点。单元测试确实不应该关心您的 DAL。

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

我是否需要为服务类中仅调用存储库类中的方法的方法编写单元测试? 的相关文章

随机推荐

  • 使用 Java 8 的 cobertura-maven-plugin

    是我一个人的问题还是 cobertura maven plugin 不适用于 java 8 当它运行时我得到 INFO cobertura maven plugin 2 6 instrument default provider impl
  • Oozie Shell Action 的 stdout 和 stderr 输出

    在 Oozie 站点中 它说 Shell 操作的 stdout 和 stderr 输出被重定向到运行 shell 命令的 Oozie Launcher 映射减少作业任务 STDOUT 谁能告诉我具体应该去哪里看 Oozie 在 启动器 中运
  • 递归是如何工作的? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 请用最简单的方式解释递归是如何工作的
  • Robotium:测试运行未能完成。预期 N 次测试,已收到 (N-1)

    Android 测试仍然是我头疼的问题 我创建了最简单的应用程序只是为了弄清楚如何Robotium有效 每次测试失败时都会出现错误 Running tests Test running started Test failed to run
  • subprocess.call cd 不起作用[重复]

    这个问题在这里已经有答案了 In 3 pwd Out 3 u Users aarcher Desktop scripts In 5 subprocess call mkdir p os path expanduser file path n
  • 防止在 C++ 中重新绘制窗口

    我正在编写一个全局钩子 DLL 它需要在窗口上使用 GDI 进行一些绘图以响应事件 我的问题是正在绘制的窗口不断重新绘制自身 因此我绘制的内容在我想要的之前就被删除了 有什么办法可以阻止窗户在我需要的时间内绘制任何东西吗 我的钩子目前是WH
  • PHP $_POST 只有 id,没有名称

    有人可以向我解释一下吗 我有以下代码
  • 如何为 CustomClipper 创建的小部件制作合适的边框和阴影

    我有一个Container里面的小部件ClipPath它使用一个CustomClipper 一切正常 我有所需的小部件形状 但是 我找不到为这个自定义形状的小部件制作阴影的方法 另外 我想要一个自动跟随此自定义小部件边缘的轮廓 边框 再次没
  • 不同的 ActionBar.Tab 使用不同的颜色

    我想让 ActionBar 中的所有选项卡都有不同的颜色指示器 例如选项卡 1 为蓝色 选项卡 2 为红色等 为了实现这一点 我为所有颜色创建了不同的选择器 并将它们放在可绘制的不同 xml 中 在 style xml 中我通过以下方式调用
  • 使用正则表达式 OR 运算符解决 2 个条件

    我正在尝试使用 OR 运算符将 2 个正则表达式合并为 1 个 我有一个检查字母后跟 8 位数字是否匹配的方法 Regex IsMatch s A Z d 8 我有另一个只检查 9 位数字的程序 Regex IsMatch s d 9 现在
  • Kubernetes 记录命令 TLS 握手超时

    我正在运行开源 kube 版本 1 9 在运行时出现 TLS 握手超时错误kubectl logs命令 其他kubectl命令工作正常 etc kubernetes pki gt kubectl get pods NAME READY ST
  • 按键或值对 JavaScript 对象进行排序; ES6

    在我问之前 关于这个特定主题有很多讨论 其中大部分与 ES5 相关 并不一定适用于 ES6 我试图得到一些澄清 也许可以帮助下一个在互联网上寻找答案的人 这是专门针对 ES6 的 问题 考虑以下对象结构 const unsorted obj
  • 如何在 Delphi 中使用非托管导出

    我正在用 C 创建一个项目 我想使用不受管理的出口 http sites google com site robertgiesecke Home uploads TOC Samples 后来在Delphi中使用它 那么谁能解释一下 非托管导
  • Google 地图 Android Api v2 的问题

    我一直在尝试实现一个示例应用程序 以研究 Google 地图 API 的工作原理 我对配置本身感到震惊 我似乎无法运行该应用程序 这是我在 Github 上的代码 https github com siva54 SampleMapAppli
  • 使用AJAX和远程PHP上传文件

    我正在尝试使用 AJAx 构建一个上传器 我想使用 AJAX 而不是表单和 Iframe 因为我希望默认 CSS 样式与响应一起使用 问题是 我的 PHP 位于远程服务器上 我正在使用 Shopify 但他们不允许我使用他们的 PHP 服务
  • 是否可以在 Microsoft TreeView Control 6.0 (MSComctlLib.TreeCtrl.2) 中模拟三态复选框?

    我在 Microsoft Access 中使用 Microsoft TreeView Control 6 0 它似乎工作得很好 除了它似乎没有灰色状态 表明检查了一些但不是所有子节点 我已经研究过使用我自己的图像来模拟复选框 但如果我这样做
  • Reactive Banana:如何使用远程 API 中的值并将它们合并到事件流中

    我在 WX 界面中使用 Reactive Banana 当按下按钮时 我需要从外部服务 API 检索值 我有一个通用的Behavior基于数据类型AppState基于函数转换 累积 转换后的变化 doSomeTransformation 转
  • 如何在 MySQL 中编写 JSON 数组对象的查询

    根据要求我需要改变逻辑 我有学生表和列 如 id 和 val 我想写一个选择查询 学生桌包含数据 id 值1 stdId 1 stdName 学生 stdAddress testLoc stdran 1 2 3 2 stdId 2 stdN
  • msbuild 的自定义 IL 重写插件

    我想创建一个自定义 msbuild 任务 将 IL rwriting 应用于我的输出程序集 目前我已经在使用 PostSharp 现在尝试扩展重写功能 对于某些特殊情况 我使用 Mono Cecil 将一些代理类型重写到程序集中 现在效果很
  • 我是否需要为服务类中仅调用存储库类中的方法的方法编写单元测试?

    Example 我有一个存储库类 DAL public class MyRepository IMyRepository public void Delete int itemId creates a concrete EF context