2010-05-05 118 views
0

我有一個有兩種方法的類。一種方法需要調用另一種方法,在我的測試中,我想聲明它是被調用的。如何在RhinoMocks的另一種方法中調用方法?

public class Tasks : ITasks 
{ 
    public void MethodOne() 
    { 
    MethodTwo(1); 
    } 

    public int MethodTwo(int i) 
    { 
    return i + 1; 
    } 
} 

我想嘲笑任務和做類似tasks.AssertWasCalled(x => x.MethodTwo(1))。必須方法二是虛擬的嗎?

回答

0

當然我當時的想法是有缺陷的。我應該嘲笑ITasks,而不是執行(任務):

ITasks tasks = MockRepository.GenerateMock<ITasks>(); 
tasks.AssertWasCalled(x => x.MethodTwo(Arg<int>.Is.Equal(1))); 
1

你正在尋找的概念是partial mocks(這顯示舊的語法,但我不記得我的頭頂新的一個)。你應該閱讀它。本質上,你在任務(而不是ITasks)上創建模擬並告訴它只模擬MethodTwo(它需要是虛擬的)。

但是......您可能想重新考慮您的設計。什麼是ITASKS?什麼是角色?他們是不同的實際任務?你有什麼理由要你們在同一個班上?我的理解是,只有當您需要測試遺留組件時纔會包含部分模擬 - 我從來沒有找到它的用處。

+0

這只是一個簡化問題的示例類。 :)在真正的代碼中,我有一個來自SharpArchitecture的任務(應用程序服務)類。無論如何,我已經開始看到糟糕的設計 - 如果我不打算從該類繼承,那麼該方法就不應該是虛擬的,下面的示例MethodTwo()僅用於MethodOne(),它是我之前的剩餘部分我猜想(我認爲它會被另一個類使用),所以現在應該將其設爲私有,並且私有方法不會被模擬/測試......感謝部分模擬的鏈接。 :) – 2010-05-05 20:36:25

相關問題