2010-12-16 42 views
2

我試圖設置預期的受保護方法調用。該方法的簽名如下:忽略Moq中受保護方法的列表類型參數

protected SqlDataReader MethodName(string Name, List<SqlParameter> paramList, SqlConnection con) 

我儘量設置的期望如下到來,但我得到的運行測試時出現錯誤:

mock.Protected() 
    .Setup<SqlDataReader>("MethodName", "SomeString", ItExpr.IsAny<List<SqlParameter>>(), ItExpr.IsNull<SqlConnection>()) 
    .Returns(dataReader); 

我得到的錯誤是:

Test method GlobalTests.DBAdapterSystemDataTest.GetDentalWingsProstheticTypeMappings threw exception: 
System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: mock => mock.ExecuteReaderStoredProcedure("GetDentalWingsProstheticTypeMappings", It.IsAny<List`1>(), It.Is<SqlConnection>(v => Object.Equals((Object)v, (Object)null))) 

有沒有人有一個想法,我可以如何設置期望,使其工作?我不在乎任何參數值,我只是想叮that該方法至少被調用過一次。

回答

1

錯誤消息意味着您需要將virtual關鍵字添加到您的MethodName方法中,以便Moq可以在測試中覆蓋它。

+0

是的,這個伎倆。我不太確定是否喜歡將所有我需要的方法模擬爲虛擬,但是我會看到它如何與Moq一起使用。 – 2010-12-20 15:30:49

+0

@安妮:是的,我也覺得有點不對勁! – 2010-12-20 15:36:19