2012-11-26 38 views
1

可以嘲笑一個priavte方法調用。Rhino Mock:嘲笑私人方法調用c#

Public void StartProcess(string valueFound) 
    { 
     if(this.value == valuefound) 
     { 
      MockThisPriavteMethodCall(); 
     } 

     AnotherPrivateMethodCallIDontNotWantToMockOut(); 
    } 

這種情況,我想測試一個私有方法,但我想嘲笑其他的結果。

在上面的示例中,我希望能夠模擬方法調用「MockThisPriavteMethodCall()」,但我希望第二個「AnotherPrivateMethodCallIDontNotWantToMockOut()」運行。

我可以使用某種形式的期望嗎?

這可以在Rhino Mock中完成,這是正確的想法嗎?

此外:我試圖測試ViewModel類中的代碼。

上面的例子也顯示它是少數公共方法之一。這些方法調用許多不同的私有方法。這再次調用許多私人方法。

我應該測試某些路徑和情況,允許代碼流過幾個分支,或者我應該只測試他們自己的方法嗎?

回答

8

從測試對象到依賴關係 - 使用模擬時,您希望模擬與您測試的對象完全相同的對象中的部分代碼,這是不對的。

很難從您的僞代碼中分得太多,但聽起來像您可能想要爲您想要僞造的代碼引入新的依賴關係。如果你能給我們更具體的背景細節,那真的會有所幫助。

+0

+1指出何時使用模擬 –

+0

@喬恩飛碟雙向,是的,我想你是對的。我在上面添加了更多的細節,希望能夠幫助解釋我的想法。這不是我擔心的代碼更多是關於如何考慮如何對這種類型的代碼進行單元測試。 – user101010101

+1

@ user101010101:說實話,現在還不是很清楚。您應該通過公共方法或潛在的內部方法來測試私有方法。 –

1

真的沒有一個乾淨的方法來做到這一點。

您可以通過將方法調用改爲protected並創建一個可繼承的可測試類來創建一個類,併爲此創建一個期望值。

已經有人說過,Jon Skeet is correct,您可能在這裏錯誤地使用了嘲諷。很顯然你想從一個方法返回一個空值,一旦你做出方法protected你可以做如下:

myclass.Stub(s => s.MockThisMethodCall()).Return("WhateverValueYouExpect");