问题标签 [automocking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3157 浏览

c# - 如何在 MOQ 中自动模拟容器(例如 IList)而无需扩展/贡献

我想知道是否可以在 MOQ 中自动模拟容器而不添加任何 MOQ 库。我在寻找一种干净的方式来自动模拟 IList 时遇到问题。

提前致谢!

0 投票
3 回答
741 浏览

c# - Machine.Fakes 如何测试虚拟方法的实现?

鉴于我有一个控制器类:

}

使用测试工具:

此单元测试将失败,因为 Subject.ResourceParent() 将返回 null,因为 Machine.Fakes 已自动模拟此方法。作为临时解决方法,我刚刚从 ResourceParent 中删除了 virtual 关键字,以便能够测试我的代码。我认为必须有一个真正的解决方案让我告诉 Machine.Fakes 不要覆盖ResourceParent()

0 投票
0 回答
340 浏览

moq - AutoMockContainer - 调用控制器时出错

一直在玩 AutoMocking。

使用 moq.contrib.indy 调用控制器时出现以下错误

{"值不能为空。\r\n参数名称:controllerContext"}

通常会这样做

如何使用 AutoMocking 模拟控制器上下文?

0 投票
1 回答
119 浏览

.net - 有什么方法可以让 Rhino Mock 在运行时自动生成“Expect.Calls”?

有什么方法可以让 Rhino Mock 在运行时自动生成“Expect.Calls”?

因此,如果我们将 Rhino 模拟拟人化,它会说……“根据这个设置,我将为我遇到的任何属于实现这些接口的类的方法生成一个 expect.call。”

0 投票
2 回答
981 浏览

asp.net-mvc-3 - 单元测试 MVC 控制器与 UnityAutoMoq 解析采用构造函数参数的接口

正如标题所说,我正在尝试解析一个实现了一个具体类的接口,该类也接受一个构造函数。

下面以具体的服务类为例:

如您所见,此服务类还需要一个接口作为构造函数参数。MVC 控制器构造函数如下所示:

感谢 Unity.Mvc3,我已经解决了 Bootstrapper 中的接口

所以我遇到的主要问题是如何使用 UnityAutoMoq 在单元测试中将 IMessageGenerator 接口的模拟实例传递给 IMessageService?我认为这样的事情会起作用,但它不会:

0 投票
1 回答
6105 浏览

c# - AutoFixture 作为 Automocking 容器与 Automocking 的区别?

我开始使用起订量,但据我了解,即使我真的不关心它们,我也总是必须模拟所有可以调用的方法。

有时需要很长时间来模拟你忘记你想要做什么的东西。所以我一直在研究自动模拟,但我不确定我应该使用哪个。

AutoFixture 作为自动模拟容器

自动模拟

我根本不知道如何使用第一个。我有点得到第二个,但从未真正尝试过。

我不确定一个是否比另一个更好。我唯一知道的是我已经在使用 AutoFixtures,这是第一个依赖项。

因此,从长远来看,使用第一个可能是有意义的,但就像我说的那样,我找不到任何关于如何使用它的基本教程。

编辑

我正在尝试遵循“Nikos Baxevanis”示例,但遇到了错误。

我认为这是因为我的 petapoco unitOfWork 财产

不知道我是否必须以某种方式或什么来模拟这个。

0 投票
1 回答
3207 浏览

c++ - 在不知道文件名的情况下对外部头文件使用 cmake 的 automoc

本质上,我希望能够 moc 不属于 cmake 中任何目标的头文件,但额外的困难是我不知道这些头文件的文件名。

实际项目非常复杂,并且是自动构建系统的一部分。下面是一个简单的例子。考虑一个结构如下的项目:

CMakeLists.txt
src/lib/source.cpp
src/lib/CMakeLists.txt
src/include/some_header.hpp # 包含在 source.cpp


中 main CMakeLists.txt 的内容:



src/lib/CMakeLists.txt 的内容:



在 source.cpp 中,文件 some_header.hpp 包含如下:



问题:
文件 some_header.hpp 包含一个 Q_OBJECT 并且有一些信号,所以 moc 需要发挥它的魔力。但是由于标头不在实际项目中,因此标头不会被嘲笑。我什至不知道 some_header.hpp 的文件名,所以我不能专门添加它来模拟。显然,即使源文件包含其中之一,AUTOMOC 也不会检查 include_directories 中的可模拟文件。

我尝试过的(不成功):


  • 如 cmake 文档中所述,在 source.cpp 中使用 #include moc_some_header.cpp 。这会导致错误,其中 cmake 抱怨它找不到 some_header{.h,.hpp,.hxx,.H}
  • 将 CMAKE_AUTOMOC_RELAXED_MODE 设置为 true。即使从文档中不清楚这实际上是做什么的。反正没什么区别。
  • 将 AUTOMOC_MOC_OPTIONS 设置为 -Isrc/include 或 -I/path/to/project/src/include 或 -I${CMAKE_HOME_DIRECTORY}/src/include
    不会做任何我能看到的事情。

AUTOMOC 的伟大之处在于我不需要知道哪些文件实际上需要被模拟。但是,在这种情况下,我需要知道我的源文件中包含的所有可能包含 Q_OBJECT 的标头。

有没有办法告诉 AUTOMOC 究竟在哪里寻找可模拟文件?

0 投票
2 回答
5033 浏览

c# - AutoFixture/AutoMoq 忽略注入的实例/冻结模拟

找到解决方案后的简短内容:

AutoFixture 返回冻结的模拟就好了;我的 sut 也是由 AutoFixture 生成的,它只有一个公共属性,该属性具有对测试很重要的本地默认值,并且 AutoFixture 设置为新值。从马克的回答中可以学到很多东西。

原始问题:

我昨天开始为我的 xUnit.net 测试开始尝试 AutoFixture,这些测试中都有 Moq。我希望替换一些 Moq 的东西或使它更易于阅读,我对在 SUT Factory 容量中使用 AutoFixture 特别感兴趣。

我用 Mark Seemann 的一些关于 AutoMocking 的博客文章武装自己,并尝试从那里开始工作,但我并没有走得太远。

这是我的测试在没有 AutoFixture 的情况下的样子:

这里的故事很简单 - 确保使用正确的键(硬编码/属性注入)SettingMappingXml查询ISettings依赖项并将结果作为XElement. 仅当ITracingService出现错误时才相关。

我试图做的是摆脱显式创建ITracingService对象然后手动注入依赖项的需要(不是因为这个测试太复杂,而是因为它足够简单,可以尝试并理解它们)。

输入 AutoFixture - 第一次尝试:

我希望CreateAnonymous<SettingMappingXml>(),在检测到ISettings构造函数参数后,会注意到已经为该接口注册了一个具体实例并注入了它——但是,它并没有这样做,而是创建了一个新的匿名实现。

这尤其令人困惑,因为fixture.CreateAnonymous<ISettings>()确实返回了我的实例-

使测试完全绿色,这条线正是我期望 AutoFixture 在实例化SettingMappingXml.

然后是冻结组件的概念,所以我只是将模拟冻结在夹具中,而不是获取模拟对象:

果然这工作得很好——只要我明确地调用SettingMappingXml构造函数并且不依赖CreateAnonymous().



简而言之,我不明白为什么它会以明显的方式工作,因为它违背了我能想到的任何逻辑。通常我会怀疑库中存在错误,但这是一个非常基本的东西,我相信其他人会遇到这个问题,而且它早就被发现并修复了。更重要的是,知道 Mark 对测试和 DI 的孜孜不倦的态度,这不可能是无意的。

这反过来意味着我必须错过一些相当基本的东西。如何让 AutoFixture 创建我的 SUT,并将预配置的模拟对象作为依赖项?我现在唯一确定的是我需要 .AutoMoqCustomization所以我不必为ITracingService.

AutoFixture/AutoMoq 包是 2.14.1,Moq 是 3.1.416.3,都来自 NuGet。.NET 版本为 4.5(与 VS2012 一起安装),在 VS2012 和 2010 中的行为相同。

在写这篇文章时,我发现有些人在使用 Moq 4.0 和程序集绑定重定向时遇到问题,所以我仔细清除了我的解决方案中的任何 Moq 4 实例,并通过将 AutoFixture.AutoMoq 安装到“干净”项目中来安装 Moq 3.1。但是,我的测试行为保持不变。

感谢您的任何指示和解释。

更新:这是 Mark 要求的构造函数代码:

为了完整起见,该GetXml()方法如下所示:

SettingKey只是一个自动属性。

0 投票
3 回答
762 浏览

mocking - 使用 Auto Mocking 容器是好还是坏?

我最近一直在做一个项目,该项目已经开始变得相当依赖,并且一直在探索使用 AutoMocking 容器来清理我的测试并使其不那么脆弱的想法。

我听说过 TDD/BDD 纯粹主义者反对使用它们的论点,例如:测试对象需要哪些依赖项并不是很明显,或者您可以添加您并不真正需要的依赖项。听起来都不是反对使用它们的特别有力的论据。

从我的角度来看,引入一个可以让我根据需要进行重构,根据业务需求删除和引入依赖项,而无需不断地返回测试并引入新的模拟/存根来编译代码。

AutoMocking 被认为是一种好/坏的做法吗?是否存在应该使用或不应该使用的特定情况?

0 投票
1 回答
3947 浏览

moq - AutoFixture.AutoMoq:将值设置为只读属性

我将 AutoFixture 与 AutoMoq 一起使用。我尝试创建一个具有 getter 但没有 setter 的属性的类的假实例。我希望 AutoFixture 能够配置模拟,因此即使没有设置器,它也会返回给定的值。

我的代码是这样的:

不幸的是,“With”方法在这种情况下不起作用,因为自动夹具说 Data 没有任何设置器,这为什么我必须在之后通过直接调用模拟来设置值。

有没有办法让自动夹具自己做到这一点,所以我不需要最后一行代码?

编辑:我犯了一个错误,代码示例不起作用。它应该是

不过,如果有假实例的 with 方法会很好。