2013-08-21 55 views
1

我有以下接口:如何用NSubstitute模擬一個帶數組參數的方法?

interface IText 
{ 
    void CopyTo(char[] array, int index); 
} 

我想創建實施IText這臺array[index]='f'array[index+1]='o'array[index+2]='o'模仿對象時CopyTo被調用。

NSubstitute可能嗎?如果是這樣,怎麼樣?

+0

注:'IText'必須是公共使用NSubstitute和其他基於代理的動態嘲諷庫來代替。 –

+0

@DavidTchepak:或者使用[assembly:InternalsVisibleTo(「DynamicProxyGenAssembly2」)] – cm007

回答

2

強制性聲明:這通常不可取。我們通常使用像IText這樣的接口,因爲我們不希望代碼依賴於這樣的實現細節,僅僅依賴於合同。以替代方式實現特定行爲意味着我們的測試代碼與此接口的特定實現緊密耦合。相反,請嘗試使用textSub.Received().CopyTo(...)來檢查調用代碼正確使用的合約。

現在,這出的方式,我們可以使用When..Do來設置此行爲:

var text = Substitute.For<IText>(); 
text.WhenForAnyArgs(x => x.CopyTo(null, 0)) 
    .Do(x => { 
      var index = x.Arg<int>(); 
      var array = x.Arg<char[]>(); 
      array[index] = 'f'; 
      array[index+1] = 'o'; 
      // etc... 
    }); 
相關問題