问题标签 [nmock]

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 投票
2 回答
1187 浏览

c# - NMock 2.0 和 NMock2 的区别

我对应该使用哪个版本的 NMock2 有点困惑。我从这里得到的一个我已经使用了一段时间的:

http://www.nmock.org/download.html

文件名为 NMock2.dll,版本为 2.0.0.44。

我遇到了一个问题,我无法模拟包含泛型函数的接口。在谷歌快速搜索后发现 NMock2 支持模拟与通用函数的交互。

原来我不得不从这里使用不同的NMock2:

http://sourceforge.net/projects/nmock2/

这个版本(NMock.dll 2.1.3641.19651)确实支持具有通用功能的接口,并且大部分与其他版本兼容。到目前为止,我发现函数存在细微的差异Will()——如果函数不是void你必须传递Return.Value(something)Will().

这里有一些关于这件事的启示:

http://codelog.blogial.com/2009/08/19/using-nmock2-in-c/#comment-4355

如果您想了解最新最好的 NMock2,请访问 http://sourceforge.net/projects/nmock2。名称中带有 2 的那个。

nmock 网站上的版本(不幸的是,它不在我们的控制之下)不再维护。

所以,问题是:后者 NMock2 (2.1) 是 NMock 2.0 的下一个版本吗?它是否合法(因为它是现在唯一支持的 nmock),我们是否应该使用它而不是 nmock.org 上的那个? ?

0 投票
2 回答
1108 浏览

mocking - 模拟帮助?我找不到什么问题

我有一个这样定义的接口:

当我尝试这样做时: Mockery mockery = new Mockery(); IDatabase db = mockery.NewMock<IDatabase>(); 我收到以下错误:

System.TypeLoadException:System.TypeLoadException:方法实现中的主体签名和声明不匹配

怎么了?(我正在使用带有 nmock2 的 Visual Studio 2008)请大家给我一个答案,我必须尽快完成。谢谢,路易莎

0 投票
2 回答
2858 浏览

tdd - NMock2.0 - 如何存根非接口调用?

我有一个类 API,它具有完整的代码覆盖率,并使用 DI 来模拟完成所有工作的主类函数 (Job.Run) 中的所有逻辑。

我在生产中发现了一个错误,我们没有对其中一个数据输入字段进行一些验证。

所以,我添加了一个名为 ValidateFoo() 的存根函数...针对这个函数编写了一个单元测试来期望 JobFailedException,运行测试 - 它显然失败了,因为该函数是空的。我添加了验证逻辑,现在测试通过了。

太好了,现在我们知道验证有效。问题是 - 我如何编写测试以确保在 Job.Run() 中实际调用了 ValidateFoo()?ValidateFoo() 是 Job 类的私有方法 - 所以它不是一个接口......

无论如何用 NMock2.0 做这个?我知道 TypeMock 支持非接口类型的假货。但是现在更改模拟库不是一种选择。在这一点上,如果 NMock 不能支持它,我只需将 ValidateFoo() 调用添加到 Run() 方法并手动测试 - 考虑到我的 Job.Run() 方法显然我不想这样做现在100%覆盖。有什么建议吗?非常感谢,非常感谢。

编辑:我想到的另一个选择是为我的 Job.Run 功能创建一个集成测试(向它注入复合对象的真正实现而不是模拟)。我将为该字段提供一个错误的输入值,然后验证作业是否失败。这有效并涵盖了我的测试 - 但它不是真正的单元测试,而是测试一个功能单元的集成测试......嗯......

EDIT2:有什么办法可以做到吗?有人有想法吗?也许 TypeMock - 或者更好的设计?

0 投票
2 回答
3054 浏览

c# - 如何在具体类上断言私有方法被称为(TypeMock/NMock/etc..)?

我正在尝试为下面的类中的“IsUnique”函数编写一个单元测试,如下所示:

我在这里唯一要测试的是 ValidateStuffExists 和 CheckUniqueness 被调用并传递了参数。这就是这个函数所做的一切,所以这就是我要测试的全部内容(我将弯曲“仅测试公共行为”伪规则并在这里测试私有方法,因为它要么有一个大的复杂方法/测试,要么测试 2 个私有方法)。

我对任何模拟库都持开放态度。我使用 NMock 并且认为它不适合任务 - 所以我下载了 TypeMock,因为我已经阅读并听说这是最好的,它甚至可以模拟具体的类/非接口方法调用......

我在我的测试中做了这样的事情,它在“Isolate.WhenCalled”行抛出异常:

这会引发类似“*** WhenCalled 不支持使用方法调用作为参数”的异常。

即使我可以用 CLR 类做同样的事情 - 我可以模拟 DateTime.Now 这样做(代码有效):

有人在这里有什么建议吗?我是否必须将这两种方法拆分为一个单独的类并制作一个接口是唯一的方法?或使我的方法/测试复杂化???这里一定有什么我想念的东西......非常感谢您提前提供的任何帮助。

编辑:我想我正在尝试为一个单元测试模拟类中的 2 个私有方法。我怎么能做到这一点而不必将这两种方法分成一个单独的类/接口?

0 投票
2 回答
678 浏览

c# - 使用 nMoq,一个给定的事件会有什么期望?

假设我想做一个单元测试,我有这个俄罗斯方块游戏,我想开始游戏,什么都不做,等待游戏结束(这是,得到一个 GameOver 事件):

我应该如何进行测试?这应该很容易,但我不知道该怎么做。我唯一的想法是以下形式:

谢谢

0 投票
2 回答
850 浏览

.net - 如何使用 NMock2 模拟内部接口?

如果我尝试这个,我只会得到一个例外:

公开接口不是一个可接受的解决方案。我不想更改我的 API 的可见性来测试它。

0 投票
1 回答
1383 浏览

c# - NMock - 如何使具有相同参数类型的方法返回不同的值?

我有这样的方法:

我的模拟对象是这样创建的

上面代码的问题是,它总是接受第一个模拟方法的参数并返回“好”。我应该怎么做才能使 NMock 为具有不同参数值的同一方法返回不同的值?请帮忙!!

0 投票
1 回答
1073 浏览

c# - 针对 WPF 和 Dispatcher 的 NMock 问题测试

这是那里的线程迷。我有这个方法:

这是在 WPF 用户控件中定义的。MeltsAvailable 是 MeltDtos 的 ObservableCollection。此代码在应用程序本身中运行时运行良好。

问题是我想创建一个单元测试,使用 NMock 来验证这个方法的结果 - 具体来说,一旦它被调用, MeltsAvailable 属性就有一些项目。下面是测试方法:

测试在第一个 Assert.AreEqual 上始终失败。vm.MeltsAvailable 此时为空。

如果我剥离所有线程并将其保留为:

测试通过。

所以,很明显,它不喜欢线程的一些东西——但即使打开 Debug->Exceptions->CLR Exceptions->Thrown,并关闭 Just My Code,我在 RefreshMelts 中也没有任何异常。

最奇怪的部分是,我将 MeltDto 对象加载到 MeltsAvailable 集合中的 Dispatcher.Invoke 调用似乎从未被调用过。我可以用断点覆盖整个部分,它们永远不会被击中。在我的测试中将 Thread.Sleep 时间提高到甚至高达 10 秒并没有任何改变。

为什么?为什么该部分没有执行,为什么我不能进入或闯入它,为什么我没有收到异常,为什么它在执行中可以正常工作,但在测试中却不行?

非常感谢,史蒂夫

0 投票
3 回答
1835 浏览

c# - 混合 NUnit 和 NMock2 匹配器时的模糊引用

我们使用 NUnit (2.5.9) 和 NMock2 进行单元测试和模拟。但是,两者都具有密切对应的匹配器语法。当我做

稍后在以下 NMock2 代码中:

还有一个 NUnit 断言:

然后VS(2008)会抱怨'Is'是'NUnit.Framework.Is'和'NMock2.Is'之间的模棱两可的引用('Has'也是如此)。

有没有办法解决?无论如何,这两个匹配器似乎都具有相似的功能。用完整的命名空间为每个匹配器类添加前缀当然是可行的,但它会使测试的可读性显着降低。

谷歌搜索这个问题根本找不到匹配,所以我的下腹部感觉是我在做一些非常愚蠢的事情。

0 投票
1 回答
334 浏览

c# - 使用 NMock 进行条件模拟

我想知道是否有人能够帮助我解决我的问题。我必须存根一个能够执行条件模拟的方法。简而言之,我喜欢存根函数根据调用时间返回同一类的不同对象。

例如

  1. 第一次调用返回 Obj1
  2. 第二次调用返回 Obj3
  3. 第三次调用返回 Obj7

...

有谁知道如何用 NMock 做到这一点?