问题标签 [partial-mocks]

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 回答
843 浏览

testing - 对部分模拟的期望 - NullReference 异常

我在使用 Rhino Mocks 进行部分模拟时遇到问题:

..我在“期望”上得到 NullReferenceException。线..

我将添加该FormsAuthenticationService工具IAuthentication

0 投票
2 回答
1652 浏览

c# - 为什么即使没有设置任何期望,我的部分模拟也会模拟所有虚拟方法?

我有一个用户控件,它在我想测试的 ValidateChildren 方法中进行一些验证。我创建了用户控件的部分模拟,但是虽然我没有对 ValidateChildren 方法设置任何期望,我只是简单地调用它,它只是被跳过并且方法中的代码永远不会执行。为了尝试了解发生了什么,我创建了一个简单的测试,如下所示:

并用它来测试它:

现在我希望 foo.Method1 会被嘲笑,而 foo.Method2 不会。但这总是返回 false,如果我尝试在调试器中单步执行,则 foo.Method2() 会被单步执行,我无法介入。

任何想法为什么?

0 投票
1 回答
3521 浏览

rhino-mocks - Rhino Mocks 模拟继承接口

我有一个类,例如 DerivedClass,它继承自基类,例如 BaseClass。BaseClass 实现了一个名为 IBaseClass 的接口。IBaseClass 有 1 个名为 TestProperty 的属性,它是一个整数自动属性。

我 PartialMultiMock DerivedClass 像这样:

然后我设定如下期望:

但我不断收到以下异常:

“无效调用,已使用最后一次调用或未进行调用(确保您正在调用虚拟(C#)/可覆盖(VB)方法)。”

如果我将 BaseClass 中的 TestProperty 实现标记为虚拟,那么一切正常,但我试图理解为什么需要这样做。如果 DerivedClass 实现了 IBaseInterface 我不需要将其标记为虚拟来获得部分模拟功能。(至少我认为不是 - 如果我错了请纠正我)

然后我更进一步,尝试将 multi mock 转换为 IBaseInterface 并将期望设置如下:

该测试现在可以正常运行,但从 TestProperty 返回的值不是 1,正如预期的那样,而是 0,即 int 的默认值。这向我暗示了类似于存根的行为。

如果可能的话,有人可以解释一下,以帮助我更好地理解这一点,因为我很困惑?我不能部分地模拟具有继承接口的类吗?为什么在接口上设置期望会表现出类似存根的行为?

提前致谢。

0 投票
1 回答
542 浏览

dependency-injection - 更喜欢依赖注入而不是部分模拟?

我知道这个SO question,但它以更笼统的方式处理该主题。

我应该更喜欢使用部分模拟而不是依赖注入吗?我的问题基于 OCMock 的以下引用:

创建一个可以像 anObject 一样使用的模拟对象。当一个没有被存根的方法被调用时,它将被转发一个对象。当使用对 anObject 的引用而不是 mock 调用存根方法时,它仍将由 mock 处理。

这意味着我可以使用部分模拟而不是在构造函数中(或通过 setter 注入)注入我的(属性)依赖项。

0 投票
3 回答
2048 浏览

java - 部分模拟代码气味?

为什么对“部分模拟”和需要它的代码有如此多的仇恨?

这是一个(理论上的)示例实现:

现在,据我了解,这是重构良好的代码。

如果我想对 operationA 和 operationB 进行 UNIT 测试,确保在每个场景中都进行审计,但不必测试审计代码的细节,我会使用部分模拟。

我没有看到/理解导致这么多项目(EasyMock、Mockito 等)推荐重构的原因是什么?

0 投票
2 回答
13103 浏览

java - 使用 mockito 进行单元测试(部分模拟)

我对 Mockito 有疑问。

有没有可能做这样的事情:

我正在使用 Mockito 1.7。

我看到有一个“间谍”系统,但他们说不建议在我们测试的项目上使用它(为什么?)......

无论如何,我尝试了那个间谍功能,但我得到了一个奇怪的行为。

检查我想要做什么:

真实代码:

测试代码:

正如他们所说,我避免了可能是间谍问题的 when thenReturn 语法(但无论如何它也不起作用)

奇怪的是: assertTrue( x.methodB(argument).equals("good") ); 没问题

只有第二个 assertTrue( x.methodA(argument).equals("good") ); 不行

实际上 helper.methodA(argument) 返回 "toto" -> 真实结果而不是模拟结果

在这种情况下,不可能告诉 mockito 返回“好”???似乎当测试类调用methodB时没问题,但是如果间谍的方法调用methodB它就不再起作用了......

我不知道该怎么办......对同一个类的2个方法进行单元测试并让测试彼此独立以使一个著名的模拟测试框架无法实现这个基本功能是不是很奇怪? ? 这不就是我们所说的真正的单元测试吗?不明白为什么他们说要避免对被测对象使用 spy 方法...

谢谢

0 投票
1 回答
161 浏览

unit-testing - 为什么我的 PartialMock 方法忽略了我的期望

我有一个基类,我将其用作 PartialMock

target.ReleaseOp(request) 调用了我在第 3 行设置了期望的 contextManager.RemoveContext 方法,但我仍然收到以下错误

Rhino.Mocks.Exceptions.ExpectationViolationException: IContextManager.RemoveContext("e04c757b-8b70-4294-b133-94fd6b52ba04"); 预期 #0,实际 #1。

这是第一个不起作用的测试(其他 45 个左右都可以),但这也是第一个使用 A)部分模拟和 B)返回 void 的模拟方法。有任何想法吗?

0 投票
1 回答
1221 浏览

c# - 为什么我的 RhinoMocks PartialMock 方法调用没有被模拟?

我正在创建一个部分模拟来测试基类的受保护辅助方法。我对是否应该存在受保护的方法或者它是否应该是注入依赖项的辩论不太感兴趣,因为我真的很想看到下面的过程工作。

EnumerationServiceBase_Accessor 是 VSTS 2010 生成的私有访问对象。除了第 17 行没有有效地设置拦截对 CreateNewContextResponse(request) 的调用的期望之外,下面的所有内容都运行良好,这是在播放期间由 partialTarget.EnumerateOp(request) 调用的受保护方法。相反,正在调用基类的实际实现。我在这里做错了什么?

这是 EnumerationServiceBase.cs 中实现的 EnumerateOp(request)

编辑:删除了不必要的信息。

0 投票
1 回答
803 浏览

tdd - 如何在程序集中使用 InternalsVisibleTo 设置对象以使用 Rhino Mocks 3.6 实现部分模拟

下面,我有一个我想测试的对象的代码。它位于一个名为 Business 的程序集中,我在 AssemblyInfo.cs 中添加了属性,以使内部构件对位于另一个程序集中的测试和 rhino 模拟可见。在测试 GenerateReport 方法时,当它是“内部”时,我无法伪造对 ValidateWorkingDirectory 的调用(System.ApplicationException:必须在任何方法调用之前设置工作目录。)。如果我公开 ValidateWorkingDirectory,问题就会消失。我认为 InternalsVisibleTo 会解决这个问题。

0 投票
1 回答
136 浏览

rhino-mocks - 部分模拟测试在从模拟方法调用调用的私有方法中调用失败

下面,我有一个我想测试的对象的代码。我在测试中使用了部分模拟,并希望在测试 GenerateReport 方法时模拟对 InsertData 的调用。出于某种原因,我的测试继续通过 InsertData 到 DoSomeStuff 并在 Path.Combine 行上失败。我错过了什么?