我在單元測試中遇到了Moq的問題,我不確定哪裏出錯。 我有一個方法,在我的界面是這樣的:使用Moq的驗證方法的錯誤
void WriteToRegistryKey (String key, Object value);
,我的單元測試這樣的:
var testRegistry = new Mock<IRegistry>();
testRegistry.Setup(x => x.WriteToRegistryKey(It.IsAny<string>(), It.IsAny<int>()));
Utility testUtility = new ConfigUtil(testRegistry.Object);
testUtility.UpdateRegistry();
testRegistry.Verify(x => x.WriteToRegistryKey("MaxNumLogFiles", 10));
下當我打電話testUtility.UpdateRegistry(引擎蓋)它叫我WriteToRegistryKey我想測試WriteToRegistryKey 傳遞正確值的方法。
但是我收到此當我運行測試:
Moq.MockException :
Expected invocation on the mock at least once, but was never performed: x => x.WriteToRegistryKey("MaxNumLogFiles", (Object)10)
Configured setups:
x => x.WriteToRegistryKey(It.IsAny<String>(), It.IsAny<Int32>()), Times.Never
Performed invocations:
IRegistry.WriteToRegistryKey("MaxNumLogFiles", 10)
如果我改變我的testRegistry.Verify到:
testRegistry.Verify(x => x.WriteToRegistryKey("MaxNumLogFiles", It.IsAny<object>()));
它的工作原理,所以這個問題似乎是圍繞第二個參數WriteToRegistryKey方法需要以及int和object之間的區別,但我似乎無法找到 。
感謝您的幫助!
在WriteToRegistryKey的簽名中,您將Object作爲值的類型....因此,任何人將一個int「值」傳遞給您的WriteRegistryKey,它將被隱式裝箱(即成爲一個對象)......我想這會影響驗證。 – 2012-08-02 16:11:03
我認爲問題出現在這方面,我不想改變任何有關WriteToRegistryKey方法的東西,但它必須可以測試它,因爲它以某種方式使用Moq ... – DukeOfMarmalade 2012-08-02 16:25:10
testRegistry.Setup(x => x .WriteToRegistryKey(It.IsAny(),It.IsAny