2012-12-15 74 views
2

我已經成功用於以下,以測試之間重置預期工作:RhinoMock.BackToRecord似乎並不例外

MyMock.BackToRecord(BackToRecordOptions.Expectations); 
MyMock.Replay(); 

然而,在情況下第二次測試嘗試扔在嘲笑異常方法,這似乎並沒有工作:

[SetUp]  
public void Setup() 
{ 
     //reset expectations for each test 
     MockRestQuestionClient.BackToRecord(BackToRecordOptions.Expectations); 
     MockRestQuestionClient.Replay(); 
} 

[Test] 
public void Test1() { 
    MyMock.Expect(t => t.Something()).Returns(someObject); 
} 

[Test] 
public void Test2() { 
    //this works when run individually, but fails if run after Test1 
    MyMock.Expect(t => t.Something()).Throw(new Exception()); 
} 

任何想法我做錯了什麼?

謝謝!

回答

0

看來你對不同的測試用例使用相同的模擬。
你有任何具體的理由來分享測試之間的嘲笑?

我認爲,如果你實例化新的模仿對象每一試驗(在Setup()方法您的問題就會消失。

UPDATE
請閱讀測試here之間共享數據的好評。

UPDATE2
如果你使用基類來設置模擬,那麼我會建議在基類中設置特定方法(例如Init())。應該標記屬性[SetUp]
結果Init()將在每次測試之前運行。每次測試都會使用新鮮的嘲笑。所以你不需要重置現有的模擬。

+0

似乎好的代碼重新使用我。我們有一個基礎測試類,它可以設置所有相關測試使用的所有模擬(這適用於Moq,但Moq缺少一些功能)。除了這個特殊情況之外,這對RhinoMocks來說也很合適。 – sydneyos

+0

這是好的重新使用*在多個測試中設置所有嘲笑*的代碼。但是,在多個測試中重用*相同的模擬實例並不好。看到我的建議如何在答案的更新中做到這一點。 –

+0

我接受有保留的答案。我不覺得有任何方法有令人信服的論據。關於不重新使用mock的理由是因爲mock不起作用(我認爲)它們應該不是一個有說服力的基礎來說明「應該」做什麼。嘲笑應該可以重新設置,imo,事實上,他們除了在這種奇怪的情況下。所以,我原來的問題仍然沒有得到答覆,也許只有Ayende才能回答。 – sydneyos