2013-07-27 59 views
4

我有一些通用方法的接口。這些方法根據傳入的數據類型執行操作。我如何用NSubstitute模擬此操作?目前,我不得不求助於使用具體類而不是模擬,因爲我無法處理該方法將被調用的所有可能的類型。使用NSubstitute嘲弄通用方法

public interface IInstanceSource 
{ 
    bool CanCreate<T>(); 
    T Create<T>(); 
    void Register<T>(Func<T> creator); 
} 

    public static IInstanceSource GetInstanceSource() 
    { 
     var _data = new Dictionary<Type, Func<object>>(); 
     var a = Substitute.For<IInstanceSource>(); 
     //code below fails since T is not defined. How do I make the code below accept any type? 
     a.WhenForAnyArgs(x=>x.Register(Arg.Any<Func<T>>)).Do(x=> { /* todo */}); 
     a.CanCreate<T>().Returns(x => _data[typeof (T)]); 
     return a; 
    } 

謝謝。

回答

4

NSubstitute不支持自動設置泛型方法的多個實例。

在測試中我們通常會看到IInstanceSource的方式是將其配置爲測試中的特定位代碼,因此T將是已知的。如果單個燈具需要爲幾種不同的工作模式工作,我們可以通過使用像ConfigureInstanceSource<T>()這樣的幫助方法來簡化配置,該方法將執行特定的配置步驟T

在你的情況,雖然好像你想要一個固定的行爲爲IInstanceSource所有假實例,在這種情況下,我相信你是通過手工編碼你自己的測試雙關正確的方式。

+0

謝謝。我必須編寫一個實現''''IInstanceSource''''的類。它工作得很好。我雖然也許它是默認支持,我沒有看到它。 – ritcoder