我正在试图弄清楚为什么我的一些测试用例(使用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()以重放模式返回,并且不需要显式移动到重播模式。“)
答案 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。