使用最小起订量测试对私有方法的调用

2024-01-10

我有以下方法需要用最小起订量进行测试。问题是 switch 语句中调用的每个方法都是私有的,包括最后的 PublishMessage。但这个方法(ProcessMessage)是公共的。我如何测试这一点,以便确保根据参数进行调用?请注意,我不是测试私有方法,我只是想测试“调用”。我想模拟这些私有方法并检查它们是否使用安装程序调用,但 Moq 不支持模拟私有方法。

public void ProcessMessage(DispenserMessageDataContract dispenserMessage)
    {
        var transOptions = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
        using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, transOptions))
        {
            switch (dispenserMessage.Type)
            {
                case DispenserMessageType.AckNack:
                    UpdateAckNackMessageQueue(dispenserMessage);
                    break;

                case DispenserMessageType.FillRequest:
                    CreateFillRequestMessageQueue(dispenserMessage);
                    break;

                case DispenserMessageType.FillEvent:
                    UpdateFillEventMessageQueue(dispenserMessage);
                    break;

                case DispenserMessageType.RequestInventory:
                    CreateRequestInventoryMessageQueue(dispenserMessage);
                    break;

                case DispenserMessageType.ReceiveInventory:
                    CreateReceiveInventoryMessageQueue(dispenserMessage);
                    break;
            }

            scope.Complete();
        }

        PublishMessage(dispenserMessage);
    }

您必须将这些私有方法更改为至少受保护的虚拟方法来模拟它们,然后使用mock.Protected来模拟它们(http://blogs.clariusconsulting.net/kzu/mocking-protected-members-with-moq/ http://blogs.clariusconsulting.net/kzu/mocking-protected-members-with-moq/)。你不能模拟私有方法。

Moq(以及其他一些框架)使用 Castle Project 的 DynamicProxy 在运行时动态生成代理,以便可以在不修改类代码的情况下拦截对象的成员。该拦截只能在公共虚拟方法和受保护的虚拟方法上完成。

请参阅以下网址了解更多信息:http://www.castleproject.org/projects/dynamicproxy/ http://www.castleproject.org/projects/dynamicproxy/

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

使用最小起订量测试对私有方法的调用 的相关文章

随机推荐

  • 缺少调试|项目的任何 CPU 构建配置,并在 Windows x64 上默认为调试|x86

    我最近刚刚在我的机器上重新安装了 Windows 7 x64 安装成功 整个操作系统没有出现任何问题 我认为 Windows 或 NET x64 存在配置问题 Symptoms 新项目的默认构建配置是调试 x86 这感觉不对 我正在运行 x
  • 测试 Google 应用内时退款测试购买

    我退款时遇到麻烦 当我登录发布商控制台时 它会显示我的购买和 取消整个订单 按钮 退款 按钮呈灰色 付款是使用测试帐户完成的 该应用程序尚未发布 我如何才能拿回我的钱 即使我通过测试帐户退款 Google 仍会向我收取 30 的费用吗 您必
  • 在MySql中使用空间函数查找两个坐标之间的距离的正确方法

    我正在尝试使用 Mysql 和 PostgresSQL 中的空间函数来计算两个位置之间的距离 我从谷歌获取了纬度和经度 详情如下 位置一 纬度 42 260223 经度 71 800010 位置二 纬度 42 245647 经度 71 80
  • 在 PyTorch 中加速 SVD

    我正在使用 Pytorch 为 CIFAR10 执行一些分类任务 对于每次迭代 我都必须对每个批次进行一些预处理 然后才能将其反馈给模型 以下是每个批次的预处理部分的代码 S torch zeros batch size C H W for
  • Python 定义迭代器类失败,并显示“iter() 返回了‘Fib’类型的非迭代器”

    我正在使用 python 2 7 和 ipython2 7 在 ipython 中我尝试过 class Fib object def init self max super Fib self init self max max def it
  • 在 Magento 中获取基本产品图像

    我想要得到baseMagento 中的产品图像可调整其大小并显示在购物车侧边栏中 不幸的是 echo this gt helper catalog image gt init product image gt resize 38 38 打印
  • MSIE 9 中的“GET”ting AngularJS 资源返回空数组

    Problem 当使用GET来自一个的请求 resource 仅在 Microsoft Internet Explorer 9 中 成功的响应是空数组 Tests 成功场景 使用 FF 或 Chrome GET请求返回开发环境和本地环境中的
  • 包装应用

    我们有一个 Windows 应用程序 我们使用 Wise 进行部署 最近我们改用InstallAware 虽然它有一些优点 但我们面临一些问题 有人可以推荐另一个部署和打包应用程序吗 我们是一家小公司 没有专门的人员进行打包等工作 我们的软
  • kubernetes 秘密在环境变量中有尾随空格

    我在 GKE 上运行的 Kubernetes 1 9 中创建了一个部署 该部署利用了放入环境变量中的机密 我使用 yaml 文件将机密上传到 GKE 其中机密经过 Base64 编码 我在容器中看到的是环境变量在那里 但值包含尾随空格 如果
  • 为什么 sockaddr_in 中需要零填充?

    我用谷歌搜索了一下 有些人说 与 struct sockaddr 保持相同的大小 但内核不会直接使用 sockaddr 对吗 使用时 内核会将其恢复到原来的样子 那么为什么需要零填充呢 struct sockaddr unsigned sh
  • 实体框架 - 无效的列名称“*_ID”

    我已将问题范围缩小到 Code First 和 Database First EF 之间的某个问题 但我不确定如何修复它 我会尽力说得清楚 但老实说 我自己也缺少一些理解 这是实体框架 4 4 我继承了一个使用实体框架的项目 但许多实际文件
  • Cloud Pub/Sub:即使注册域名后,HTTP URL 也未注册

    我有一个 Google Pub Sub 项目 并创建了一个主题和一个简单的订阅 但是 当指定推送的 URL 时 我不断收到以下错误 我已完成站点验证过程并在 API 和服务中注册了域 如中所述https cloud google com p
  • 为什么 PHP 将字母 E 的字符串转换为数字?

    为什么下面的语句会返回true 608E 4234 272E 3063 我也尝试过在字符串周围使用单引号 我可以让它评估的唯一方法false是通过使用 运算符而不是 我的猜测是 PHP 将其视为某种方程式 但这似乎有点奇怪 有人可以详细说明
  • 在Java中一次导入所有子包[重复]

    这个问题在这里已经有答案了 Java中是否可以一次性导入所有子包 据我所知 这在 C 中似乎是可能的 C 如何一次性导入命名空间 https stackoverflow com questions 4806986 c how to impo
  • ASP.NET Core Identity 中基于临时会话的声明

    在 ASP NET Core Identity 中添加声明非常简单 但我无法找到如何添加基于临时会话的声明 我的用例是这样的 具有自己的自定义声明的登录用户需要定期添加新声明 但仅限于当前会话 而不是持久化到数据库 当他们关闭浏览器或退出后
  • 如何从 plist 文件中提取字符串进行翻译(本地化)?

    我需要准备用于翻译 iPhone 应用程序的字符串列表 我已经从中提取了字符串使用 genstring 的 m 文件 and 使用 ibtool 从 XIB 文件中命令 但我也有plist 文件中需要翻译大量文本 字符串字段类型包含在str
  • 用 Ninject 拦截。无法加载 IProxyRequestFactory

    我正在学习使用 Ninject 和 Interceptor 模式 我有以下拦截器 public class MyInterceptor IInterceptor public void Intercept IInvocation invoc
  • 什么是好的头像电子邮件示例?

    在 Ember js 文档中看到类似的演示后 我刚刚做了一个演示 该演示根据您的电子邮件获取您的头像 我目前正在使用 电子邮件受保护 cdn cgi l email protection作为默认值 但这似乎是错误的 因为它是一个 React
  • ruby 的 3D 引擎是什么

    我正在寻找用于开发 ruby 游戏的 3D 引擎 我发现了一些像 G3Druby 或 ogrerb 的东西 哪一个更好用并且功能更好 还有其他发动机比这些更好吗 两者似乎都是 G3D 和 Ogre 的包装 因此您实际上应该比较 G3D 或
  • 使用最小起订量测试对私有方法的调用

    我有以下方法需要用最小起订量进行测试 问题是 switch 语句中调用的每个方法都是私有的 包括最后的 PublishMessage 但这个方法 ProcessMessage 是公共的 我如何测试这一点 以便确保根据参数进行调用 请注意 我