使用 FakeItEasy 模拟方法内的方法

2024-03-19

如何模拟/伪造在另一个函数中调用的函数的结果?通常 Test2 是一个我不喜欢获取真实数据的 DataAccess 方法。 我喜欢我的单元测试测试的是业务逻辑。

这就是我现在所拥有的,但它根本不起作用。 Sum 始终被断言为 5!

public int Test1()
{
    var value = this.Test2(); //Unittest should substitute with 5
    var businesslogic = value + 10; //The business logic

    return businesslogic;
}

public int Test2()
{
    return 10; //I try to mock this value away in the test. Don´t go here!
}

然后我有一个单元测试,我想在我的“业务逻辑”上运行。

[TestMethod()]
public void TestToTest()
{
//Arrange
var instance = A.Fake<IClassWithMethods>();

      //Make calling Test2 return 5 and not 10.
A.CallTo(() => instance.Test2()).Returns(5);

      //Call the method 
var sum = instance.Test1();

//Assert if the business logic in the method works.
Assert.AreEqual(15, sum);
}

据我所知你不能这样做。

Your instance不是真实类的实例,只是其接口的模型,因此调用instance.Test1()不会调用您上面描述的代码。但是您可以进行单元测试Test2方法自有。

但是,您可以做的是进行 2 个单元测试。

在第一个测试中(测试方法Test2),您可以使用必要的依赖项实例化您的类(或者如果不存在具有某些值/参数的依赖项)。

然后使用相同的输入参数进行第二次测试,并进行测试Test()方法。

模型仅用于必须在接口上进行模型化的依赖项(已实例化)outside您测试的班级)。即如果你有ClassA and ClassB and ClassA依赖于取决于IClassB界面。然后你可以模拟B来测试A。

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

使用 FakeItEasy 模拟方法内的方法 的相关文章

  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 错误消息是 (#12) bio 字段在 v2.8 及更高版本中已弃用

    我使用了 spring social facebook 的 2 0 3 RELEASE 版本和 Facebook 应用程序 api v2 8 我调用 Facebook 登录但返回了此消息 12 bio 字段在 v2 8 及更高版本中已弃用
  • Symfony / PHP - 存储单个值的最佳方式

    假设我有一个在 Symfony 3 2 Doctrine 上运行的应用程序 问题 存储会随着某些操作而改变的单个值的最佳方法是什么 第一个想法 我认为创建一个具有单个属性的实体将创建一个具有单个列的表 该列将具有单个值 更改某些操作 这不是
  • 用于拒绝请求的 NetflixOSS Zuul 过滤器

    我正在尝试在简单的 spring cloud Netflix Api 网关 反向代理 中使用 ZuulFilter 以便对自定义身份验证提供程序进行请求身份验证 通过 Rest 调用 过滤器应使用 401 拒绝未经授权的请求 并且不要将这些
  • 使用 JDBC 批量删除和插入

    我想知道是否可以使用批处理来执行参数化 DELETE 和 INSERT 语句 我知道如何插入多行 但是 我首先想做一个 DELETE 语句 这需要不同的参数 以下是我插入多个语句的方法 String query INSERT INTO TA
  • 如何将 Wicket 的 DownloadLink 与动态生成的文件一起使用?

    DownloadLink https ci apache org projects wicket apidocs 1 4 x org apache wicket markup html link DownloadLink html创建用于下
  • 类与二维数组

    在 PHP 中 二维数组和类哪个更好用 我举了一个例子来说明我的意思 Using a class class someClass public name public height public weight function constr
  • struct {0} 和 memset 0 有什么区别[重复]

    这个问题在这里已经有答案了 假设我们有这样的结构 struct A int x int y 有什么区别 A a 0 and A a memset a 0 sizeof A 没有任何 最终结果是两者都将结构体成员初始化为0 C99 标准 6
  • Java 有 IndexSet 和 Range 类吗?

    在 Objective C Cocoa 中 我们有NSIndexSet类 它通过保留范围数组来有效地存储一系列唯一索引 例如 集合 1 2 30 57 将存储为范围 1 30 和 57 而不是存储为 32 个数字的数组 这有助于以简单快速的
  • 表格滚动侦听器

    我正在尝试找出滚动表的事件 我可以获取左侧参数 例如使用 scrollTable offset left 但我无法添加其变化的监听器 我想要的就是监视表格左滚动参数的变化并将其应用到另一个 DOM 元素 这不是问题 我的表格的 HTML 示
  • C++ lambda回调触发事件

    我一直在尝试了解 C 中的回调功能 我想要实现的目标如下 我有两个对象 每个对象都有自己的线程 一个物体A有一个指向第二个对象的指针B 参见示例 class A public private std unique ptr b b class
  • XmlReaderSettings CheckCharacters=false 似乎不起作用

    我正在尝试反序列化来自 Rest 服务的 xml 响应 我正在实现 IXmlSerialized 因为 xml 相当具体 并且我进行自定义序列化 响应包含非法 xml 字符 但由于我无法修改 xml 所以我必须处理它们 解决方案似乎很简单
  • 将一组布尔值转换为数字

    这是我将用来获取一组三个布尔值并将其转换为 switch 语句的 int 的代码 int bits 0 bool a true b false c true 101 5 bits bits a lt lt 2 bits bits b lt
  • python 在测试文件中的模块导入期间模拟函数调用

    我正在尝试模拟导入模块时执行的函数调用 下面是我遇到的问题的示例 app module py from util import get param PARAM get param param name class sample def ru
  • ImportError:导入 sampy.TurtleWorld 时没有名为 Tkinter 的模块

    我正在使用 Python 3 4 并按照本书进行操作 思考 Python 如何像计算机科学家一样思考 http www greenteapress com thinkpython thinkCSpy pdf 我实际上在一周前就发现了这个问题
  • 以编程方式设置网格排序

    是否可以在读取数据之前以编程方式设置 KendoUI 数据源的排序参数并避免第二个服务器读取 范围是对特定用户交互设置默认排序 如何 这是我想要做的一个例子 因为答案没有切中要害 或者也许我不明白事情是如何运作的 我定义了一个具有初始排序的
  • 根据单元格中的第一个字符隐藏 Google 电子表格中的行

    我正在努力向 Google 电子表格添加功能 电子表格从网络导入数据 并且我将其全部格式化 我的一个专栏是一系列字符串 以两种方式之一进行格式化 String 或 String 不带空格 基本上是从网络导入斜体 我正在尝试编写一个在打开电子
  • C# - 如何将单个 Excel 工作表从一个工作簿复制到另一个工作簿?

    我需要将工作表从一个工作簿复制到另一个工作簿中 但我有点卡住了 前提是我有一个 主 工作簿 其中存储了许多报告的模板 然后我需要创建特定工作表的空白副本并将其添加到新工作簿中 这是我到目前为止所拥有的 private void Create
  • 无法在 Swift 中使用缓存生成视频缩略图

    一直在努力让它发挥作用 我正在生成视频缩略图 但它在集合视图中加载非常重 我想缓存它们 但找不到解决方案 这是我正在使用的代码 func previewImageFromVideo url NSURL gt UIImage let asse
  • 将现有项目转换为可定制的框架

    我是一名 Android 开发人员 我需要创建 IOS 应用程序 所以我这样做了 应用程序现在已经准备好了 但现在我想把它变成一个库 框架 我的意思是每个客户的不同项目将使用相同的代码库 他们将能够更改应用程序的文本字符串和颜色 其余的业务
  • 使用 FakeItEasy 模拟方法内的方法

    如何模拟 伪造在另一个函数中调用的函数的结果 通常 Test2 是一个我不喜欢获取真实数据的 DataAccess 方法 我喜欢我的单元测试测试的是业务逻辑 这就是我现在所拥有的 但它根本不起作用 Sum 始终被断言为 5 public i