- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在阅读 Roy Osherove 的 单元测试艺术 时开始尝试使用 Rhino-Mocks (3.6)。他有一个示例,演示模拟方法可以编写脚本以在使用相同参数调用两次时返回不同的结果:
[Test]
public void ReturnResultsFromMock()
{
MockRepository repository = new MockRepository();
IGetRestuls resultGetter = repository.DynamicMock<IGetRestuls>();
using(repository.Record())
{
resultGetter.GetSomeNumber("a");
LastCall.Return(1);
resultGetter.GetSomeNumber("a");
LastCall.Return(2);
resultGetter.GetSomeNumber("b");
LastCall.Return(3);
}
int result = resultGetter.GetSomeNumber("b");
Assert.AreEqual(3, result);
int result2 = resultGetter.GetSomeNumber("a");
Assert.AreEqual(1, result2);
int result3 = resultGetter.GetSomeNumber("a");
Assert.AreEqual(2, result3);
}
这很好用。但是当我尝试用一个 stub 和一个接受并返回字符串的方法做同样的事情时,我无法生成第二个返回值:
[Test]
public void StubMethodWithStringParameter_ScriptTwoResponses_SameResponseReceived()
{
MockRepository mocks = new MockRepository();
IMessageProvider stub = mocks.Stub<IMessageProvider>();
using (mocks.Record())
{
stub.GetMessageForValue("a");
LastCall.Return("First call");
stub.GetMessageForValue("a");
LastCall.Return("Second call");
}
Assert.AreEqual("First call", stub.GetMessageForValue("a"));
Assert.AreEqual("Second call", stub.GetMessageForValue("a"));
}
}
public interface IMessageProvider
{
string GetMessage();
string GetMessageForValue(string value);
}
此测试失败,因为两次调用均收到“First Call”。我已经尝试了一些复杂的语法(使用 mocks.Ordered()、SetResult、Expect 等),但仍然无法让第二个结果出现。
我是不是做错了什么,或者这是 Rhino-Mocks 的限制?我检查过这个 blog post ,但建议的语法没有解决我的问题。
最佳答案
你缺少的一点是告诉 stub 第一个值应该只返回一次:</p>
...
using (mocks.Record())
{
stub.GetMessageForValue("a");
LastCall.Return("First call").Repeat.Once();
stub.GetMessageForValue("a");
LastCall.Return("Second call");
}
当然,您的“Second call”实际上意味着“Second-or-subsequent call”,除非您对 Repeat 施加其他限制。
您还可以考虑使用 RhinoMocks 现在提供的更新的 Arrange、Act、Assert ( AAA) 语法:
[Test]
public void StubMethodWithStringParameter_ScriptTwoResponses_SameResponseReceived()
{
IMessageProvider stub = MockRepository.GenerateStub<IMessageProvider>();
stub.Expect(mp => mp.GetMessageForValue("a"))
.Return("First call")
.Repeat.Once();
stub.Expect(mp => mp.GetMessageForValue("a"))
.Return("Second call");
Assert.AreEqual("First call", stub.GetMessageForValue("a"));
Assert.AreEqual("Second call", stub.GetMessageForValue("a"));
}
它更简洁一些,通常使您不必担心 stub 的记录-回放-断言状态。德里克·贝利 (Derick Bailey) 写了一篇 article about using Repeat在 Los Techies 上。它也恰好使用 AAA 语法)。
关于c# - 使用 Rhino-Mock stub 的排序方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5609589/
尝试使用 RhinoMock 模拟函数。 var repository = new Rhino.Mocks.MockRepository(); var classMock = repository.D
我已经阅读了很多示例/教程(包括 Ayende 在 MSDN 上的 Alexandria)。 但事实证明,仅仅获得一些更新的程序集本身就是一个障碍。获得正确版本的 CaSTLe.Windsor 后 -
我正在使用 java 运行用 Rhino 编写的命令行实用程序,但如果出现错误,我需要将该错误返回给 shell,以便停止处理。如何将错误代码从 Rhino 传回给 shell? 最佳答案 你可以用
为了它的乐趣,我尝试使用 envjs 在 Rhino 中运行 JSLinux,它似乎没有抛出任何错误,也似乎不起作用。 如此处所述:How do I locally host the webbrows
有谁知道为什么 UsernameExists 不会返回 True。我的语法一定在某个地方搞砸了。 [TestMethod()] public void GenerateUsername
Rhino Mock 库是否有可比较且可靠的替代品。我现在将 Rhino 用于 MVC ASP.NET 项目,但正在考虑(就像计划 B)看看是否有任何其他等效的替代方案。 最佳答案 RhinoMock
我有一个 Java 7 项目,该项目大量使用 Javascript 来编写各种功能的脚本。到目前为止,我一直使用 Rhino 作为脚本引擎。我现在想迁移到 Java 8,这也意味着我将用 Nashor
我正在寻找一种让 stub 的返回值取决于其输入的干净方法。 目前我正在使用以下方法,但效果不佳。 metadataLogic.Expect(x => x.GetMake(args.Vehicle1.
我正在设置调用构建和执行查询的方法的期望。我想询问所用参数的属性。这可能吗 using (mocks.Record()) { Expect.Call(connection.Retrieve(S
有没有人有一个使用 Rhino Mocks 和 NInject 的自动模拟容器的实现? 最佳答案 好的,我使用 Moq 集成作为起点自己构建了一个。这很简单。你需要这 3 个类: public cla
谁能告诉我为什么下面的测试没有失败? [Test] public void uhh_what() { var a = MockRepository.GenerateMock(); a.
有人可以分享下载最新版本的 Rhino 模拟二进制文件的链接吗(仅限二进制文件,我不需要源文件)?链接 http://ayende.com/projects/rhino-mocks/downloads
我最近才开始使用 Rhino-Etl对于非常简单的 ETL 过程,并取得了巨大的成功。我现在有一个稍微复杂的场景要解决,但我没有发现 ConventionInputCommandOperation 以
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我通常是单元测试和模拟的新手,并且正在尝试为我的一个类设置测试,我想确保从同一类中的另一个方法调用特定方法。因此,我想使用具体的实现,但要模拟它的一部分。这可能吗? 公共(public)课 MyCla
我一直在阅读有关 Rhino 的文章,认为这是一种在我的 Java 代码中实现 JavaScript 的有用方法。 在阅读了一段时间后,在 google 和这里进行了搜索,我找不到在 Java 中
我正在尝试使用 Rhino 服务总线在 1 个发布者和多个订阅者之间设置发布-订阅。然而,我似乎得到的只是竞争消费者(消息在一个消费者或另一个消费者之间分发,但不发送给两者)。 我当前的发布者配置如下
我有一个设置属性的方法 public void SetNetworkCredential(string userName, string password, string domain) {
有没有比以下 kludge 更简洁的方法来获取 Javascript 对象的 JSON 表示? System.out.println(((ScriptableObject) scope).callMe
好的,我知道 Rhino Mocks 中新的 AAA 语法存在很多混淆,但我必须说实话,从我目前所看到的来看,我喜欢。它读起来更好,并节省了一些击键。 基本上,我正在测试 ListController
我是一名优秀的程序员,十分优秀!