2014-10-03 65 views
1

我有以下的方法來模擬:Moq.Setup方法與T?

AddParameter<T>(string parameterName, T value) 
AddParameter<T>(string parameterName, T? value) where T : struct; 


private void SetupAddParameter<T>(){ 
    mock.Setup(u => u.AddParameter<T>(Moq.It.IsAny<string>(), Moq.It.IsAny<T>()))... 
    mock.Setup(u => u.AddParameter<T>(Moq.It.IsAny<string>(), Moq.It.IsAny<T?>())) -> not working 
} 

我怎麼能嘲笑第二種方法?

+0

除非你有一個'其中T:class'第一個約束和第二個「where T:struct」約束,它們實際上沒有任何區別。 – 2014-10-03 10:18:51

+0

@TrevorPilley第二個地方T:struct – Freedom 2014-10-03 10:19:44

+0

第一個也沒有編譯,你需要指定一個類型,你不能說'It.IsAny ()' – 2014-10-03 10:31:28

回答

0

OK,你不能在同樣的方法做兩種設置,你需要做的結構版本它自己的方法與where T : strut限制:

private void SetupAddParameter<T>() 
{ 
    // Setup for AddParameter<T>(string parameterName, T value); 
    mock.Setup(u => u.AddParameter<T>(Moq.It.IsAny<string>(), Moq.It.IsAny<T>())); 
} 

private void SetupAddParameter<T>() where T : struct 
{ 
    // Setup for AddParameter<T>(string parameterName, T? value) where T : struct; 
    mock.Setup(u => u.AddParameter<T>(Moq.It.IsAny<string>(), Moq.It.IsAny<T?>())); 
} 
+0

我收到「在Moq.dll中發生類型'System.NullReferenceException'的異常,當調用時: AddParameter (」TEST「,null) – Freedom 2014-10-03 14:02:28

+0

搜索此錯誤後,我認爲有一個錯誤moq:https ://github.com/Moq/moq4/issues/90,https://github.com/Moq/moq4/issues/114 – Freedom 2014-10-07 08:24:53