2012-05-23 41 views
1

Rhino Mocks是否可以創建一個存根,並引發所有調用的異常?如何創建存根,在Rhino mock中的所有調用中拋出異常?

public interface IMyIF 
{ 
    // Some methods 
} 

[TestClass] 
public class MyTestClass 
{ 
    [TestMethod()] 
    public void MyTest() 
    { 
     MockRepository mocks = new MockRepository(); 
     IMyIF stb = mocks.Stub<IMyIF>(); 

     // Somehow set stb to throw some exception on every method call 
     // without knowing all the methods and overloads in IMyIF interface 

     // use stb to test something 
    } 
} 

回答

4
var stb = MockRepository.GenerateStrictMock<IMyIF>(); 
+0

現在已經夠好了,但是如果我想拋出特定的異常呢? –

+0

我不認爲這是可能的與犀牛嘲笑。 –

+0

爲什麼要創建存根呢?代替傳遞'null' –

1

很奇怪的要求。你想要測試什麼?如果您正在測試接口IFoo的方法Bar當您的測試類調用它時會引發一些異常,那麼只需在方法Bar上設置此期望。不要一次測試所有方法。

這將專注您的SUT和依賴之間的一個特定的相互作用測試(我會走這條路):

var mock = MockRepository.GenerateMock<IMyIF>(); 
mock.Expect(m => m.Foo()).Throw(new MyCustomException()); 
sut.Exercise(mock); 

這將引發ExpectationViolationException:

var mock = MockRepository.GenerateStrictMock<IMyIF>(); 
sut.Exercise(mock); 

這將引發的NullReferenceException:您可以創建類MyIFStubIMyIF刪除。右鍵單擊接口名稱並選擇實現接口。 Visual Studio將生成接口的子對象成員,這將引發NotImplementedException。如果您需要,您可以更改存根實施:

public class MyIFStub : IMyIF 
{  
    public void Foo() 
    { 
     throw new NotImplementedException(); 
    } 

    // other members 
} 
+0

我正在測試MyClassUnderTest,這取決於IMyIF。我不想依賴IMyIf中實際調用的方法的重載(它可以改變,但測試的意義不是),我想測試一下,當調用MyClassUnderTest的MethodUnderTest和IMyIF時,那個函數取決於,失敗,MethodUnderTest從那種情況中恢復。 –

+0

但你不要指望,MethodUnderTest會調用任何IMyIF的隨機成員,是嗎? –

+0

其實我不在乎哪一個會叫。所有的方法都做同樣的事情,只是差異是一些額外的信息論證,對於這個測試來說並不重要。 –

相關問題