2009-08-12 94 views
1

我只需要模擬Method1來測試我的過程異常。我該怎麼做?如何嘲笑一種方法?

public interface IFoo 
{ 
    void Method1(); 
    object Method2(); 
} 
public class Foo : IFoo 
{ 
    public void Method1() 
    { 
     // Do something 
    } 

    public object Method2() 
    { 
     try 
     { 
      // Do something 
      Method1(); 
      // Do somenthing 

      return new object(); 
     } 
     catch (Exception ex) 
     { 
      // Process ex 
      return null; 
     } 
    } 
} 
+0

嘗試「你纔剛剛一個是方法,你只是一種方法「在一首歌曲的聲音;-) – 2009-08-12 20:32:11

+0

你不應該在測試Method2()時嘲笑Method1(),這意味着你正在測試模擬對象。在一個班級和空間中可能會發生太多的事情來分解它。 (通常在這些類型的情況下) – 2009-08-13 05:30:20

回答

4
fooMock = MockRepository.GenerateStub<IFoo>(); 
fooMock.Stub(x => x.Method1()).Return("Whatever"); 
+0

它不能解決我的問題,但給我點亮。謝謝! – Zote 2009-08-12 20:38:37

0

的接口是一個紅色的鯡魚。你必須嘲笑實現Foo和改變方法1是虛擬:

... 
public virtual void Method1() 
... 

使用throw擴展來創建你想處理異常:

var fooMock = MockRepository.GenerateStub<Foo>(); 
fooMock.Expect(foo => foo.Method1()).Throw(new Exception()); 

var actual = fooMock.Method2(); 
Assert.IsNull(actual); 

fooMock.VerifyAllExpectations(); 
+0

我認爲你只能存根接口...(但我可能是錯的) – Martin 2009-08-13 01:54:19