非常简单的RhinoMocks测试失败 - 这里有什么问题?

时间:2012-04-03 09:59:57

标签: c# nunit rhino-mocks

我正在试图弄清楚为什么我的一些测试用例(使用RhinoMocks 3.6 Build 20)无效,我将问题缩小到以下最小单元测试:

public interface ITest
{
    string Something { get; }
}

[Test]
public void TestStub()
{
    var mockery = new MockRepository();
    var testItem = mockery.Stub<ITest>();
    testItem.Stub(x => x.Something).Return("Hello");
    Assert.AreEqual("Hello", testItem.Something);
}

此操作失败并显示以下消息:

Expected: "Hello" But was: null

任何想法我在这里做错了什么?我在SO和the Rhino Wiki上找到了一些关于如何存根只读属性的例子,据我所知,这应该可以正常工作。

提前干杯。

编辑:根据下面的sll建议,我尝试更换

testItem.Stub(x => x.Something).Return("Hello");

testItem.Expect(x => x.Something).Return("Hello");

并且测试仍然以同样的方式失败。

编辑2:我通过添加行

来实现这一点
mockery.ReplayAll();
在断言之前的

- 但我认为不再需要(来自wiki:“从MockRepository.GenerateMock()返回的Mocks /存根和MockRepository.GenerateStub()以重放模式返回,并且不需要显式移动到重播模式。“)

3 个答案:

答案 0 :(得分:1)

尝试生成Mock:

var testItem = MockRepository.GenerateMock<ITest>();     
testItem.Expect(x => x.Something).Return("Hello");     
Assert.AreEqual("Hello", testItem.Something); 

Als确保你共享了整个测试方法,也许你忽略了一些代码行? 尝试使用Repeat.Any()或许可以在您期望之前访问。

testItem.Expect(x => x.Something).Return("Hello").Repeat.Any();     

在用于方法的示例页面Stub()上,建议使用Mock的Expect()作为属性:

Using Expect() to set up properties

  

Expect()扩展方法可用于设置期望和   返回属性的值。

答案 1 :(得分:1)

知道了:

来自RhinoMocks 3.6 Blog Post comments

09/03/2009 05:34 PM by 库尔特哈里格

FYI,

从这样的代码升级到v 3.6后,我有几十个测试失败:

var mocks = new MockRepository();

var something = mocks.Stub

something.Stub(x =&gt; x.DoSomething())。返回(true);

something.DoSomething();

问题的根本原因似乎是mock.Stub / Mock / etc在重放模式下不再返回模拟。 使用MockRepository.GenerateStub修复替换的mock.Stub。

Ayende Rahien 09/03/2009 06:50 PM by Ayende Rahien

库尔特,

实际上是预期的,应该从来没有用过

因此,将测试更改为:

    [Test]
    public void TestStub()
    {
        var testItem = MockRepository.GenerateStub<ITest>();
        testItem.Stub(x => x.Something).Return("Hello");
        Assert.AreEqual("Hello", testItem.Something);
    }

这现在有效。

干杯

答案 2 :(得分:-1)

您只需设置值,就可以这样做:

public interface ITest
{
    string Something { get; }
}

[Test]
public void TestStub()
{
    var mockery = new MockRepository();
    var testItem = mockery.Stub<ITest>();
    testItem.Something = "Hello";
    Assert.AreEqual("Hello", testItem.Something);
}

无需使用Func。