簡體   English   中英

為什么要將值提取到'var'變量行為?

[英]Why does extracting a value to a 'var' variable change behaviour?

我使用EasyMoq( http://wp7fx.codeplex.com/ )作為Windows應用商店應用程序中的模擬框架。 在測試用例的設置代碼中,我的代碼如下所示:

var mock = Easy.Moq.Mock<SomeClass>();
mock.Setup(m => m.SomeMethod("an arg", Allow.Any<AnotherClass>())).Returns("a value");

此代碼正常工作。 對於那些不熟悉EasyMoq的人, Easy.Moq.Mock<...>()實例化一個mock和mock.Setup(m => m.XYZ()).Returns(...)配置mock返回當它接收到對mock的XYZ()方法的調用時的值。 Allow.Any<T>()表達式表明它應匹配任何值。 通過查看其源代碼,顯然它只返回default(T) 細節並不重要。

因為這是一個非常長的語句,我決定通過將Allow.Any<...>()表達式Allow.Any<...>()壓縮為隱式變量來解決它,如下所示:

var mock = Easy.Moq.Mock<SomeClass>();
var arg = Allow.Any<AnotherClass>();
mock.Setup(m => m.SomeMethod("an arg", arg)).Returns("a value");

但是,在mock上調用方法后,由於System.NullReferenceException ,此代碼失敗。 這可能是EasyMoq中的一個錯誤,但我的問題是:

這種重構怎么會改變代碼的行為呢?

我願意打賭.Setup簽名涉及表達式...它可能將輸入檢查為表達式並對它們進行評估...並且因為你的var語句(var無關緊要) Allow.Any<T> call,表達式然后解析default(T)而不是Allow.Any<T> ...你能告訴我們.Setup簽名嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM