最小起订量 类中只有一个方法

2024-03-09

我正在使用 moq.dll 当我模拟一个类(所有 IRepository 接口)时,我使用这行代码

   int state = 5;
   var rep = new Mock<IRepository>();
   rep.Setup(x => x.SaveState(state)).Returns(true);
   IRepository repository = rep.Object;

但在这种情况下,我模拟了存储库类中的所有函数。 然后将类存储库中的所有方法替换为 Mock dll 的方法设置

我想使用类存储库(真正的类)中定义的所有方法并仅模拟一个函数(SaveState)

我怎样才能做到这一点?有可能吗?


您可以创建真实存储库的实例,然后使用As<>()获得所需的接口,然后您可以使用设置覆盖该接口,如下所示:

var mockRep = new Mock<RealRepository>(ctorArg1, ctorArg2, ...)
                     .As<IRepository>();
mockRep.Setup(x => x.SaveState(state)).Returns(true);

Then mockRep.Object作为被测试类的存储库依赖项。 请注意,您只能模拟方法Interface*,或者说虚方法,就是这样。

Update:*这可能不适用于所有情况,因为.Setup只会工作在virtual方法和 C# 接口实现是“虚拟”和密封 https://stackoverflow.com/a/3621456/314291 默认情况下 https://stackoverflow.com/a/5386481/314291。并使用As()将防止部分模拟行为。

所以看来RealRepository具体类需要实现IRepository与虚拟方法接口以便部分模拟成功,在这种情况下CallBase可用于接线。

   public interface IRepo
   {
      string Foo();
      string Bar();
   }

   public class RealRepo : IRepo
   {
      public RealRepo(string p1, string p2) {Console.WriteLine("CTOR : {0} {1}", p1, p2); }
      // ** These need to be virtual in order for the partial mock Setups
      public virtual string Foo() { return "RealFoo"; }
      public virtual string Bar() {return "RealBar"; }
   }

   public class Sut
   {
      private readonly IRepo _repo;
      public Sut(IRepo repo) { _repo = repo; }

      public void DoFooBar()
      {
         Console.WriteLine(_repo.Foo());
         Console.WriteLine(_repo.Bar());
      }
   }


   [TestFixture]
   public class SomeFixture
   {
      [Test]
      public void SomeTest()
      {
        var mockRepo = new Mock<RealRepo>("1st Param", "2nd Param");
        // For the partially mocked methods
        mockRepo.Setup(mr => mr.Foo())
           .Returns("MockedFoo");
        // To wireup the concrete class.
        mockRepo.CallBase = true;
        var sut = new Sut(mockRepo.Object);
        sut.DoFooBar();
      }
   }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最小起订量 类中只有一个方法 的相关文章

  • 尚未注册类型“IServiceProviderFactory[Autofac.ContainerBuilder]”的服务

    当运行以下命令添加数据库迁移脚本时 出现以下错误 dotnet ef migrations add InitialCreate v o Migrations context MyContext 访问 Microsoft Extensions
  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 如何从 Angular 规范触发输入 onchange

    我有一个input HTML File filed
  • 尽早设置日志记录:捕获导入期间发出的警告

    我希望所有警告都按照我希望处理日志的方式进行处理 即使这些是在导入库期间发出的 这意味着必须在导入库之前完成日志记录的配置 经过一段时间的搜索后 我认为在自定义中配置日志记录sitecustomize py可能是一个解决方案 But sit
  • 向 Citrix 会话发送消息

    我有在本地和 Citrix 会话上运行的程序 我需要以非常可靠的方式从本地运行的程序向 Citrix 会话上运行的程序发送一位消息 该客户端称为 MetaFrame 演示服务器客户端 到目前为止我想到了以下几种方法 使用 TCP IP 然而
  • sql server中日期时间的内部表示是什么?

    SQL Server 中存储的日期时间值的基础数据结构是什么 2000 和 2005 如果不同 即精确到字节表示 据推测 当您选择日期时间列时获得的默认表示形式是特定于区域性的值 可能会发生变化 也就是说 一些我们看不到的底层结构被格式化为
  • 如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?

    我正在使用 EF Core 5 0 并有以下代码 public async IAsyncEnumerable
  • 在哪里可以找到图片的 Instagram 媒体 ID

    我正在寻找MediaID已上传的 Instagram 图片 它应该看起来像 1234567894561231236 33215652 我发现最后一组整数是usersID 例如 这是直接图像的链接 但是我看不到mediaID以正确的格式 ht
  • ES6 中检查构造函数是否继承另一个构造函数

    我遇到一种情况 我需要检查构造函数 X 的原型链中是否有另一个构造函数 Y 或者是 Y 本身 最快的方法可能是 new X instanceof Y 在这种情况下 这不是一个选项 因为如果在没有有效参数的情况下实例化 相关构造函数可能会抛出
  • 如何使用谷歌性能工具

    我刚刚开始使用谷歌性能工具 google perftools and libgoogle perftools4ubuntu 中的软件包 我发誓我在谷歌上搜索了大约一天 但没有找到答案 问题是我没有通过 CPU 分析获得所有函数的结果 这是我
  • 如何创建一个动态导航栏,当您到达某个位置时它会跟随您

    我想创建一个类似于此网站的导航栏 http www mysupermarket co uk shelves top offers in asda html http www mysupermarket co uk shelves top o
  • 始终使用 Azure Key Vault SSMS 清除错误进行加密

    I m trying to setup a new Always Encrypted database using Azure Key Vault I have previously had this working In the SSMS
  • Hibernate慢sql未记录

    记录用 Hikari 包装的 sql 语句时出现问题 我有休眠属性 hibernate session events log LOG QUERIES SLOWER THAN MS 50 logging level org hibernate
  • Android ListView 与 SQLite

    我想刷新列表视图项目 这些项目是从 SQLite 数据库填充的 我的代码如下 public class Weeve extends Activity private String lv arr protected ListView CVie
  • 使用 google 登录进行身份验证时出现错误 12501

    我在用着谷歌登录服务 https developers google com identity sign in android start对使用我的应用程序的用户进行身份验证 当我刚刚请求电子邮件信息时 我得到了它的工作 GoogleSig
  • 如何检索实现自定义接口的所有类?

    我想要获得所有实现的类IFeature界面 Java Refelctions 似乎是一个可能的解决方案 但它并没有按照我想要的方式工作 IFeature feature new Landing Class c cls System out
  • 使用多个 jquery-ui 版本

    我们有两个使用 jQuery UI 的网站 其中一个网站包含另一个网站的一些内容 这些部分是基于 Jquery UI Accordion 构建的 但我无法加载两个版本的 UI 一个是 1 8 11 的自定义版本 另一个是完整版本 完整版本不
  • 使用JPA和JTA的单元测试代码

    我使用2个独立的数据库 所以我必须使用JTA来处理分布式事务 所以要么两个数据库都必须提交 要么都回滚 我使用开放的 JPA 和 JTA 现在使用 junit 对代码进行单元测试吗 当我尝试运行处理分布式交易的代码时 出现以下错误 我在此网
  • 如何在 Glide/Picasso/Ion 等占位符中加载 gif 图像

    无法找到在占位符中加载 gif 图像的完美解决方案 Glide with context load imageUrl asGif placeholder R drawable gifImage crossFade into imageVie
  • Android应用内购买,如何检查用户是否购买了一件商品

    在 SharedPreference 中设置一个值来标记用户已购买该商品是否可以且安全 如果用户在 SharedPreference 中破解此值会怎样 或者我每次都需要连接IAP服务来检查用户是否可以使用它 1 使用 Google Andr
  • 如何在android中通过屏幕进行自定义共享

    我的应用程序有一项共享功能 因此 当单击共享时 它应该显示要共享的应用程序列表 现在我正在使用这段代码 Intent sendIntent new Intent sendIntent setAction Intent ACTION SEND
  • 最小起订量 类中只有一个方法

    我正在使用 moq dll 当我模拟一个类 所有 IRepository 接口 时 我使用这行代码 int state 5 var rep new Mock