对模拟对象的期望似乎没有得到满足(最小起订量)

2024-01-22

我在 Moq 中遇到了一些奇怪的行为 - 尽管我设置了一个模拟对象以某种方式行事,然后在我正在测试的对象中以完全相同的方式调用该方法,但它的反应就像该方法是从来没有打电话过。

我正在尝试测试以下控制器操作:

public ActionResult Search(string query, bool includeAll)
{
    if (query != null)
    {
        var keywords = query.Split(' ');
        return View(repo.SearchForContacts(keywords, includeAll));
    }
    else
    {
        return View();
    }
}

我的单元测试代码:

public void SearchTestMethod() // Arrange
    var teststring = "Anders Beata";
    var keywords = teststring.Split(' ');
    var includeAll = false;
    var expectedModel = dummyContacts.Where(c => c.Id == 1 || c.Id == 2);
    repository
        .Expect(r => r.SearchForContacts(keywords, includeAll))
        .Returns(expectedModel)
        .Verifiable();

    // Act
    var result = controller.Search(teststring, includeAll) as ViewResult;

    // Assert
    repository.Verify();
    Assert.IsNotNull(result);
    AssertThat.CollectionsAreEqual<Contact>(
        expectedModel, 
        result.ViewData.Model as IEnumerable<Contact>
    );
}

where AssertThat只是我自己的一个类,带有一堆断言助手(因为Assert类无法使用扩展方法进行扩展...叹息...)。

当我运行测试时,它失败了repository.Verify()线,用一个MoqVerificationException:


Test method MemberDatabase.Tests.Controllers.ContactsControllerTest.SearchTestMethod()
threw exception:  Moq.MockVerificationException: The following expectations were not met:
IRepository r => r.SearchForContacts(value(System.String[]), False)  

如果我删除repository.Verify(),集合断言失败告诉我返回的模型是null。我已经调试并检查过query != null,并且我被纳入了if代码运行的块。那里没有问题。

为什么这不起作用?


我怀疑这是因为您传递到模拟存储库的数组(结果teststring.Split(' ')) 与实际从 Search 方法传入的对象(结果query.Split(' ')).

尝试将设置代码的第一行替换为:

repository.Expect(r => r.SearchForContacts(
    It.Is<String[]>(s => s.SequenceEqual(keywords)), includeAll))

...它将比较传递给模拟的数组的每个元素与中的相应元素keywords array.

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

对模拟对象的期望似乎没有得到满足(最小起订量) 的相关文章

  • Google 测试中没有模拟的 EXPECT_CALL

    有没有办法通过 GoogleTest for c 测试函数调用而不创建模拟对象 例如我们有以下生产代码 if a method x 我想测试一下是否method在这种情况下将被调用a是真的并且a是假的 我想构建一个与 Google Test
  • 如何将测试文件夹添加到旧的 Android Studio 项目

    我在将用于测试的项目结构添加到 Android Studio 中的旧 Android 项目中时遇到一些问题 当您在 Android Studio 中创建新项目时 您将获得从一开始就创建的用于测试的目录 src test java for u
  • Python 包?

    好吧 我认为无论我做错了什么 它可能都是显而易见的 但我无法弄清楚 我已经阅读并重新阅读了有关包的教程部分 我唯一能想到的是这不起作用 因为我直接执行它 这是目录设置 eulerproject init py euler1 py euler
  • 当 TestCase 包含数组时,NUnit 无法识别该 TestCase

    这是我在 NUnit 中遇到的非常简单但烦人的行为 我有一些这样的测试 Test TestCase 1 2 hello TestCase 3 5 goodbye public void MyClass MyMethod int a int
  • 起订量要求?违背了目的?

    是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的 我的意思是 如果我必须修改我的对象并虚拟化我想要模拟的每个访问器 我难道不能继承我的类并自己模拟它吗 你的问题非常有效 但如果你仔细想想 没有其他方法可以模拟课程 如果你采用一个接
  • 在 JerseyTest 中访问 Spring beans

    我试图弄清楚如何从 JerseyTest 的子类访问 Spring bean 扩展 JerseyTest 我已经设法在测试中加载 Spring 上下文 但我还没有弄清楚如何访问 spring 上下文 我的设置如下所示 public abst
  • MVC .NET 如何为现有源代码添加单元测试项目?

    我已经创建了 MVC 项目 VS2008 NET 3 5 第一次VS2008问我 您想为此应用程序创建单元测试项目吗 我选择否 现在我意识到它变得越来越复杂 TDD 测试驱动开发 方法会更好 但无法找到如何在我的解决方案中添加单元测试项目
  • 我如何模拟 UserManager 和 RoleManager 进行单元测试

    我模拟了抽象类来测试类的具体方法 如下所示 var mock new Mock
  • 对自定义 symfony 约束进行单元测试

    这应该非常简单 但今天下午它让我发疯 对自定义 symfony 验证器进行单元测试的正确方法是什么 我能找到的所有文章都与我的做法完全相同 class Foo extends Constraint public string message
  • 将 TypeMoq 模拟与 Angular TestBed 结合使用

    我定义了一个FooService如下 import Injectable from angular core export interface Foo Foo string Injectable export class FooServic
  • 将 Foq 与 F# 函数类型结合使用

    例如 我使用 F 类型定义来防止函数之间的硬依赖 type IType1 int gt int type IType2 int gt string let func1 i int int i i let func2 i int string
  • 使用 Maven 插件测试工具测试 Mojos 的默认值和表达式:

    我在使用 Maven 插件测试工具 2 0 alpha1 时遇到问题 当我想测试 Mojo 时 参数的默认值和表达式不适用 我有以下参数 p The output file to write the settings to p parame
  • 重试 polly 单元测试(xunit 和 moq)

    我有 net core weabpi 参见下面的代码 我正在使用 polly 重试策略 请参阅下面的策略 我想对端点 getProducts 进行单元测试并测试 polly 重试 我已经发现这些例子 https github com App
  • 如何从 VS2013 为基于 ADO.Net 的存储库编写单元测试代码

    我在单元测试领域很新 那么请指导我如何在控制器内为基于 ADO Net 的存储库和操作方法编写单元测试 我将使用 VS 自己的单元测试框架 所以请看代码并告诉我哪些类和函数需要经过单元测试 如果有人告诉我哪些区域需要单元测试以及哪些区域不需
  • CMake - 作为构建过程的一部分运行测试并将标准输出捕获到文件

    我们有几个单元测试 我们希望将其作为构建过程的一部分运行 为了实现这一目标 我有一个帮助程序脚本 它创建一个运行测试的自定义命令 如果成功 则创建一个文件 test name passed 然后我添加一个自定义目标 test name ru
  • xCode 7.1 中警报的 UITesting

    我正在 xCode 7 1 中编写 UITests 并且在测试警报时遇到问题 在我的情况下允许通知 创建测试时 xCode 会写入以下代码 app alerts U201cAppName U201d Would Like to Send Y
  • 如果任何单元测试失败,如何使 Python 的覆盖率工具失败?

    我想使用 shell 脚本来确保我的单元测试通过and我的代码有足够的测试覆盖率 我只想运行我的测试代码once 我希望我可以通过coverage https coverage readthedocs io 工具和单次运行的工具 如果一项或
  • 使用 IQueryable 进行单元测试代码

    我被要求为某些功能编写一些单元测试 但坦率地说 我不太确定这样做的必要性或有用性对于这个特殊的一段代码 我绝不试图质疑单元测试的必要性或有用性 所讨论的代码非常简单并且被大量使用 基本上它是 Skip 和 Take 扩展方法的包装 在我看来
  • 单元测试内存泄漏

    我有一个应用程序存在大量内存泄漏 例如 如果打开一个视图并关闭它 10 次 我的内存消耗会增加 因为视图没有完全清理 这些是我的内存泄漏 从测试驱动的角度来看 我想编写一个测试来证明我的泄漏 并 在修复泄漏之后 断言我修复了它 这样我的代码
  • PHP 启动:运行单元测试时无法加载动态库

    当我尝试运行单元测试时 出现此错误 PHP 警告 PHP 启动 无法加载动态库 bz2 尝试过 xampp php ext bz2 找不到指定的模块 xampp php ext php bz2 dll 找不到指定的模块 在未知的第 0 行

随机推荐

  • Python:列表理解背后的机制

    当使用列表理解或infor 循环上下文中的关键字 即 for o in X do something with o or l o for o in X 背后的机制如何in works 其中包含哪些函数 方法X它打电话吗 If X可以遵循多种
  • 使用具有相同参数的不同模板模板参数重载函数时出错

    我有一个类 它获取两个模板模板参数 并使用一个参数重载一个函数 该参数是一个或另一个模板模板参数 但两次都使用相同的模板参数 template
  • 使用boost::iostreamsmapped_file_source和filtering_streambuf解压缩文件

    我计划处理大型压缩文件 并且希望对文件进行内存映射以加快读取速度 我采用了带有常规文件输入的现有示例 但无法编译或工作 我正在使用 C Boost 1 49 欢迎任何建议 include
  • 在 C# 中创建/打开从路径到新 Outlook.MailItem 的现有消息

    您好 我想从磁盘上的现有 Outlook MailItem 创建一个 Outlook MailItem 我相信 我将路径存储在字符串中 并且希望访问以保存其中的正文和附件 我似乎不知道如何在 C 中打开它并访问它 目前我有类似的东西 其中
  • 从字符串中删除数字

    我想知道如何从字符串中删除数字 我尝试使用 StringReplace 但不知道如何告诉函数我要替换数字 这是我尝试过的 StringReplace mString 0 9 rfReplaceAll rfIgnoreCase 简单但有效 可
  • fatal:您当前的分支似乎已损坏

    我使用时出现此错误 git log fatal 您当前的分支似乎已损坏 我的分支文件被破坏了 我在记事本中打开 git refs heads mybranch 但我只看到一些 在文件中 我知道我必须找到分支哈希并将其复制到 git refs
  • 在滚动上重新定位 CdkConnectedOverlay

    我正在尝试使用CdkConnectedOverlay单击按钮时显示叠加层 它大部分工作正常 但覆盖层没有在滚动时重新定位 我确信我遗漏了一些小东西 但我一生都无法弄清楚 我在用着Angular 7 2 8 and Angular CDK 7
  • 无法从 iOS OAuth1.0、OAConsumer 客户端在 tumblr 上发帖

    我正在尝试将 tumblr 集成到我的应用程序中 我能够成功获取访问令牌 但是 当我尝试发帖时 出现以下错误 meta status 401 msg Not Authorized response 我正在使用OAuthConsumeriOS
  • 关联的遍历方向

    我正在读这本书领域驱动设计 of 埃里克 埃文斯 第5章 关于协会 他降低模型复杂性的建议之一是为关联施加遍历方向 I quote 尽可能地限制关系很重要 A 双向关联意味着两个对象都可以被理解 只有在一起 当应用需求不需要遍历时 在两个方
  • 静音按钮不会使 AVAudioPlayer 静音

    我需要在我的 iPhone 应用程序中循环播放 caf 文件 AVAudioPlayer 看起来很有前途 但有一个问题 即使我按下 iPhone 上的静音按钮 它也不会停止或静音 据我了解 在 iOS 5 中 无法以编程方式查明静音按钮是否
  • WooCommerce 付款完整挂钩

    经过长时间的搜索 我找到了这篇文章 WooCommerce 挂钩用于 付款完成后 操作 https stackoverflow com questions 28218580 woocommerce hook for after paymen
  • Mongo,通过id列表查找

    我有一个返回字符串 MongoDB id 列表的进程 512d5793abb900bf3e20d012 512d5793abb900bf3e20d011 我想向 Mongo 发起一个查询 并按照与列表相同的顺序获取匹配的文档 执行此操作的
  • React Native AsyncStorage getItem 返回承诺而不是值

    我有一个登录表单 我可以发布表单值 成功的 POST 请求后 我会收到从 API 返回的身份验证令牌 我需要将此令牌保存在本地存储中以供将来参考 为了保存此身份验证令牌 我使用 AsyncStorage 我用了AsyncStorage se
  • Python 发送的 MIME 电子邮件附件未显示在 mail.live 中

    我有一个 Python 3 脚本 它使用 MIMEMultipart 发送带有生成的附件的 xlsx 文件的电子邮件 我曾经在 Py2 上使用相同的脚本来发送相同的生成文件 唯一的区别是 Py2 脚本从 MySQL 收集信息来创建 xlsx
  • 三次曲线 JavaFX

    我在 JavaFX 中的 CubicCurve 上遇到了困难 例如 如何绘制 y x 3 绘制曲线的机制看起来非常笨拙 是否可以将曲线的端点之一连接到另一个节点 以便当该节点的位置发生变化时曲线会适应它 Thanks 我认为 JavaFX
  • 更换默认手机APP

    我正在尝试替换默认的 Android 电话应用程序 更具体地说 我想在每次执行呼叫操作时启动自定义电话呼叫屏幕 我知道自 Android 的 API 24 版本 7 0 Nougat 以来这是可能的 但我没有找到有关如何实现此目的的参考资料
  • 在 ionic 中加载 url 显示空白屏幕

    我在网上搜索过 但没有得到关于这个问题的具体信息 我正在使用 ionic v1 其中我正在加载我的 adfs url 来要求用户通过 adfs 网页登录 但仅在某些手机上我看到登录页面 而在其他手机上我看到空白屏幕 我尝试调试它 但到目前为
  • 如何在 Android 中以编程方式加载布局 XML 文件?

    我已经做了一个布局 比如说my layout xml 其中以编程方式包括另外两个 XML 布局文件 例如一些 layout xml and another layout xml my layout xml是使用绘制的setContentVi
  • 查找两个蓝牙设备之间的方向(定位)

    我有一个应用程序 可以扫描另一部手机正在广播的特定 UUID 并测量它们之间的信号强度 并告诉您离它们是否越来越近或越来越远 我想添加一个方向箭头 我知道如果你有 3 个点 你可以使用三角测量 但我想用 2 个点得到一些稍微准确的东西 有什
  • 对模拟对象的期望似乎没有得到满足(最小起订量)

    我在 Moq 中遇到了一些奇怪的行为 尽管我设置了一个模拟对象以某种方式行事 然后在我正在测试的对象中以完全相同的方式调用该方法 但它的反应就像该方法是从来没有打电话过 我正在尝试测试以下控制器操作 public ActionResult