2009-12-15 49 views
3

我遇到过几次遇到过这种情况,但从未找到好的答案。假设我有一类像下面这样,其中一个方法调用另一个在同一类:使用Rhino Mocks的“自我嘲讽”

public class Foo 
{ 
    public int Bar() 
    { 
     if (Baz()) 
     { 
      return 1; 
     } 
     else 
     { 
      return 2; 
     } 
    } 

    public virtual bool Baz() 
    { 
     // behavior to be mocked 
    } 
} 

我想单元根据巴兹的返回值测试方法条的行为()()。如果Baz()处于不同的类中,我会调用PartialMock在该类上设置模拟行为,但在测试类本身使用PartialMock时似乎不起作用。是否有捷径可寻?我错过了什么?

我使用的是Rhino Mocks 3.5和.NET 2.0。

回答

3

您可以使用存根来模拟Baz方法。如果您正在使用.NET 3.5你可以使用lambda表达式但随着.NET 2.0你可以使用匿名委托,如下面的例子:

Foo f = MockRepository.GenerateStub<Foo>(); 
// lambda: 
// f.Stub(x => x.Baz()).Return(true); 
// anonymous delegate: 
f.Stub(delegate(Foo x) { return x.Baz(); }).Return(true); 
Console.WriteLine(f.Bar()); 
+0

我尝试过了,它的工作原理完全一样标榜。谢谢! – 2009-12-15 17:48:38