2014-02-20 64 views
0

一個void方法返回一個值,如何使用模擬回調如何從使用模擬設置

在我的單元測試我都嘲笑來電DB寫入調用方法的無效方法返回一個值。這種方法是無效類型,但對於我的測試斷言,我需要驗證傳遞給此方法的參數之一。 有沒有辦法在模擬設置上返回這個參數?

這是我的代碼。

public virtual void InsertOrUpdateBrewedEntity(RawDataLeaf theRawData, //this parameter i want to check for assertion 
                XsdInfo allXsdInfo = null, 
                DbWritingActionCode actionCode = DbWritingActionCode.I, 
                Dictionary<string, string> dataIdMap = null, 
                Action<string, RawDataLeaf> testActionToDoInsteadOfWriting = null, 
                string transactionName = null, 
                bool skipValidationEvenForTypesThatCantSaveIfNotValid = false, 
                bool disableExtraSqlForXsdType = false, 
                string nameOverride = null) 
    { 
     //code 
    } 

所以我想在模擬方法設置上獲得RawDataLeaf的RawDataLeaf的值。

這裏是我如何設置這個模擬方法調用。

_xmlCupboardWriteAccess.Setup(x => x.InsertOrUpdateBrewedEntity(It.IsAny<RawDataLeaf>(), 
                   It.IsAny<XsdInfo>(), 
                   It.IsAny<DbWritingActionCode>(), 
                   It.IsAny<Dictionary<string, string>>(), 
                   It.IsAny<Action<string, RawDataLeaf>>(), 
                   It.IsAny<string>(), 
                   It.IsAny<bool>(), 
                   It.IsAny<bool>(), 
                   It.IsAny<string>())); 
+0

你不能從void返回數據,這就是它的意思。你也許可以使用out(http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx)關鍵字。 – Bonzo

+0

@Bonzo我寧願有一個解決方案,不需要我改變我嘲笑的方法的簽名。作爲質量保證,我被允許編寫測試,但不能更改實施的代碼。但是,謝謝你的建議。 –

回答

0

這聽起來像你只是驗證方法被稱爲與特定的值,所以在您的通話Verify使用It.Is<>

_xmlCupboardWriteAccess.Verify(x => x.InsertOrUpdateBrewedEntity(
    It.Is<RawDataLeaf>(actualRawDataLeaf => /* your equality test */), 
    It.IsAny<XsdInfo>(), 
    // ... etc 
+0

以您建議的方式實現,但得到一個異常「模擬期望的調用至少一次,但從未執行過」 –

+0

@RahulLodha您仍然需要調用'Setup'來調用您的問題。這只是驗證它是用正確的參數調用的。 –