2010-06-17 115 views
1

我一直在試圖找出這一個,我如何測試一個私有方法與我正在測試的類中的rhino mocks調用。所以我的課堂會是這樣的。Rhino Mocks驗證私有方法是從公共方法調用

Public class Foo 
{ 
    public bool DoSomething() 
    { 
     if(somevalue) 
     { 
      //DoSomething; 
     } 
     else 
     { 
      ReportFailure("Failure"); 
     } 
    } 

    private void ReportFailure(string message) 
    { 
     //DoSomeStuff; 
    } 
} 

所以我的單元測試是在Foo類和方法DoSomething的()我要檢查並確保一定的消息傳遞給ReportFailure如果someValue中是假的,用犀牛嘲笑。

回答

2

可能有辦法做到這一點,但在大多數情況下,你不想這樣做。您的單元測試不應該依賴於隱藏的實現或代碼。當你測試他們的時候,把你的班級當作黑匣子,你只能訪問改變輸入和測試輸出。

如果您正在測試私有方法執行,您很可能會潛入太多的實現某個給定的類,並且使您很難在不破壞測試的情況下改變您的實現。

+0

同意,你應該通過公共接口設計你的類的可測性。如果您無法訪問需要驗證的內部狀態,則需要更強大的公共接口。 – darthtrevino 2010-06-17 02:33:49

+0

我完全同意黑盒原理,但是我知道我的一些測試證實我正在測試的類在方法調用後已在內部正確更新。 – Flynn1179 2010-06-24 13:28:07

0

我同意mjd79的答案,但如果你娶了驗證ReportFailure叫,那麼你可以在方法的保護級別更改爲Internal的想法,並設置您的組裝InternalsVisibleTo屬性,以便允許你的單元測試訪問它。

更好的方法可能是模擬ReportFailure訪問的任何資源,並驗證該模擬中的某些公共方法是否被調用。

相關問題