问题标签 [mocking]

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 投票
11 回答
93752 浏览

php - 如何让 PHPUnit MockObjects 根据参数返回不同的值?

我有一个 PHPUnit 模拟对象,'return value'无论它的参数是什么,它都会返回:

我想要做的是根据传递给模拟方法的参数返回一个不同的值。我试过类似的东西:

但是,如果没有使用参数调用模拟,这会导致 PHPUnit 抱怨'two',所以我假设 的定义methodToMock('two')覆盖了第一个的定义。

所以我的问题是:有没有办法让 PHPUnit 模拟对象根据其参数返回不同的值?如果是这样,怎么办?

0 投票
2 回答
1439 浏览

java - 我可以使用 jmock 替换工厂返回的实现吗?

我有一个返回接口的工厂FormatService

是否可以模拟这个工厂,以便它在我们的单元测试中 始终返回FormatService-的存根实现?FormatServiceStub

0 投票
7 回答
513 浏览

asp.net - ASP.NET - 关注点分离

想象以下场景 - 我们有 Page1,其中包含控件 Control A 和 Control B。

假设控件 A 有一个按钮,单击此按钮时我们希望控件 B 做出反应。但是我们想以一种抽象的方式来做这件事,即我们不能让控件 B 知道关于控件 A 的任何事情,反之亦然。

这样我们就可以单独开发这些控件,并通过单元测试来驱动它们。

现在,我以为我有解决方案,只是想知道你们对此有何看法。

单击控件 A 的按钮时,我在 Session 上放置了一条“消息”,即 Session["MESSAGES"] = "ControlA_Click"。

在 Page1 中,在 Page_LoadComplete() 上,我调用了 ProcessMessages,如下所示:

在 ControlB 的 ProcessMessage() 方法中,我们可以对 ControlB 感兴趣的消息做出反应,如下所示:

对我来说,这似乎有效。它允许我们完全独立地开发这些控件,同时仍然允许在抽象级别进行控件间通信。

我能想到的唯一可能导致崩溃的可能是与页面和用户控件相关的 ASP.NET 生命周期。我认为它的方式是在拥有页面上调用 Page_LoadComplete() 之前,应该在控件上处理所有事件。

想法?

0 投票
7 回答
22830 浏览

tdd - 断言一个方法只被调用一次

我想断言一个方法只被调用一次。我正在使用 RhinoMocks 3.5。

这是我认为可行的方法:

GetMeMyThing()如果第二次调用调用,我希望此测试失败source.GetSomethingThatTakesALotOfResources()

0 投票
3 回答
5595 浏览

ruby - 集成测试中的模拟文件系统

我正在编写一个执行一些外部命令行实用程序的 ruby​​ 程序。如何从我的 rspec 测试中模拟文件系统,以便我可以轻松设置一些文件层次结构并在测试后对其进行验证。最好在 ram 中实现,以便快速运行测试。

我意识到我可能找不到可移植的解决方案,因为我的外部实用程序是直接与操作系统文件服务交互的本机程序。Linux 是我的主要平台和解决方案就足够了。

0 投票
6 回答
1289 浏览

asp.net - 进行 TDD 时如何最好地创建测试数据库?

在做 ASP.NET 站点(例如 ASP.NET MVC 站点)时创建测试持久层的最佳实践是什么?

我见过的许多示例在单元测试项目中使用 Moq(或其他模拟框架),但我想像 .. moq 一样将我的持久层移除,以便我的网站显示数据和内容,但它不是来自数据库。我想最后这样做。我见过的所有嘲笑的东西都只存在于单元测试中。

当人们想要(存根?)伪造一个持久层以实现快速开发时,他们会做什么实践?我使用依赖注入来处理它,并为我的持久层提供了一些硬编码的结果(这真的很手动而且很无聊)。

其他人在做什么?示例和链接会很棒:)

更新

只是一点点更新:到目前为止,我从拥有一个假存储库和一个 SQL 存储库中获得了相当多的里程——每个类都实现了一个接口。然后,使用 DI(我正在使用 StructureMap),我可以在我的假存储库或 SQL 存储库之间切换。到目前为止,它运行良好:)

(想想我在将近 11 个月前问过这个问题也很可怕,从我现在编辑这个问题开始!)

0 投票
15 回答
1713 浏览

oop - 更重要的是代码的可测试性,还是遵守 OOP 原则?

我的团队对 TDD 的演变包括似乎与传统 oop 的不同之处。

  1. 远离自给自足的类 我们仍然在适当的地方封装数据。但是为了模拟任何辅助类,我们通常创建一些方法来通过构造函数或修改器从外部设置它们。

  2. 我们从不使用私有方法。为了利用我们的模拟框架(RhinoMocks),方法不能是私有的。这是向我们的传统开发者“出售”的最大的一个。在某种程度上,我明白他们的观点。我只是更重视测试。

你怎么认为?

0 投票
2 回答
198 浏览

unit-testing - 你在哪里取笑 - 直接依赖,或者你扩大界限......?

所以,我对 C# 和 .NET 中的单元测试和模拟都相当陌生;我分别使用 xUnit.net 和 Rhino Mocks。我是一个皈依者,我想我专注于编写行为规范,而不是纯粹的 TDD。呸,语义;本质上,我想要一个自动安全网在上面工作。

一个想法让我印象深刻。我得到了针对接口的编程,而分解依赖项的好处就在那里。卖。但是,在我的行为验证套件(又名单元测试;-))中,我一次断言一个接口的行为。就像一次一个接口的实现一样,它的所有依赖项都被模拟出来并建立了期望。

这种方法似乎是,如果我们验证一个类的行为与它的协作依赖项一样,并且反过来依赖于每个协作依赖项来签署相同的质量合同,那么我们就很成功了。似乎足够合理。

不过,回到这个想法。在半集成测试中是否有任何价值,其中测试夹具针对连接在一起的具体实现单元进行断言,并且我们正在针对模拟依赖项测试其内部行为?我刚刚重读了一遍,我想我可能会措辞更好。显然,我想会有一定数量的“好吧,如果它为您增加价值,请继续这样做” - 但有没有其他人考虑过这样做,并从中获得超过成本的收益?

0 投票
8 回答
53949 浏览

python - 一个模拟/存根 python 模块如何像 urllib

我需要测试一个需要使用 urllib.urlopen 查询外部服务器上的页面的函数(它也使用 urllib.urlencode)。服务器可能已关闭,页面可能会更改;我不能依靠它进行测试。

控制 urllib.urlopen 返回的最佳方法是什么?

0 投票
10 回答
11363 浏览

unit-testing - 为什么我的单元测试需要一个模拟框架?

最近,围绕 .NET 世界中所有不同的模拟框架进行了相当大的宣传。我还没有完全理解他们的伟大之处。编写我自己需要的模拟对象似乎并不难。特别是在 Visual Studio 的帮助下,我可以快速编写一个类来实现我想要模拟的接口(它为我自动生成几乎所有内容),然后为我的测试所需的方法编写一个实现。完毕!为什么要为了节省几行代码而费尽心思去理解一个模拟框架。还是一个模拟框架不仅仅是为了节省代码行数?