2011-06-22 32 views
0

我有一个理解LastCall()方法的问题。Rhino Mocks LastCall语法帮助,.NET

下面是一个例子:

public interface IDemo 
{ 
    string Prop { get; set; } 
    void VoidNoArgs(); 
} 


[TestMethod] 
public void SetupResultUsingOrdered() 
{ 
    MockRepository mocks = new MockRepository(); 
    IDemo demo = mocks.StrictMock<IDemo>(); 

    SetupResult.For(demo.Prop).Return("Ayende"); 

    using(mocks.Ordered()) 
    { 
      demo.VoidNoArgs(); 
      LastCall.On(demo).Repeat.Twice(); 
    } 

    mocks.ReplayAll(); 

    demo.VoidNoArgs(); 

    for (int i = 0; i < 30; i++) 
    { 
      Assert.AreEqual("Ayende",demo.Prop);  
    } 

    demo.VoidNoArgs(); 

    mocks.VerifyAll(); 
} 

我说得对不对地说:

LastCall.On(demo).Repeat.Twice();指定demo.VoidNoArgs();被称为两次,最后一次呼叫。

但是,在demo.VoidNoArgs()之间有一个代码块。这是否意味着在使用LastCall方法时不计算财产?

+2

你想要达到什么目的?你不应该使用RhinoMock的Record/Replay语法,因为它现在已经死了。尝试学习与AAA(安排行为断言)suntax而不是 –

+0

@Thoms,我不同意你。它们并存。 http://ayende.com/wiki/Comparison+of+different+Rhino+Mocks+syntaxes.ashx – Pingpong

+0

我想我不明白这个问题。上述测试通过我的机器。你想让它失败吗?如果失败,测试if属性是否被调用多次。 – Gishu

回答

0

声明:非常规Rhino-mocks用户。

在这种情况下,SetupResult似乎没有设置期望值。由于您使用的是StrictMock,因此您需要设置明确的来设置对模拟的每个呼叫的期望值。

如果你想测试

  • 检查只two calls on VoidNoArgs and not anything else:评论的SetupResult线。
  • 检查序列 - VoidNoArgs > Prop.get > VoidNoArgs

using (mocks.Ordered()) 
{ 
     demo.VoidNoArgs(); 
     Expect.On(demo).Call(demo.Prop).Return("Ayende"); // fails unless you use .Repeat.Times(30) or make just one call. 
     demo.VoidNoArgs();