2012-12-22 43 views
0

不能運行功能我想在一個非常簡單的界面上進行單元測試。 我的界面:moq-爲什麼不能使用默認參數

public interface Interface1 
    { 
     string retStr(string dd); 
     string retStr2(string dd,string fff); 
    } 

這是模擬:

var myMoq = new Mock<Interface1>(); 

myMoq.Setup(d => d.retStr("David")).Returns("retStr"); 
Console.WriteLine(myMoq.Object.retStr("fdf").ToString()); 
I GOT runtime error: Object reference not set to an instance of an object. 

,以及執行另一個錯誤:

myMoq.Setup(d => d.retStr2(It.Is<string>(e=>e=="qqq"), It.IsAny<string>())).Returns("2 parameters"); 
Console.WriteLine(myMoq.Object.retStr2("fdf","wewew").ToString()); 

爲什麼呢?

+0

一個問題:我假設你在嘲笑Interface1,因爲我t是一個依賴項,你實際測試的東西是否正確?如果不是,測試模擬真的沒有意義。嘲笑是對實際實施進行測試的補充。 –

回答

3

在您的設置中,您正在設置傳遞特定字符串的期望值(例如「David」)。

您正在告訴Moq,如果方法用字符串「David」調用,則返回「retStr」,否則返回一個默認值(對於字符串,null)因此,當您對結果執行.ToString()該方法的,對象爲null。

同樣的道理也適用於第二個例子。

爲了做出更一般的返回值,使用It.IsAny<string>()設置方法的時候,或者,像您期望的做在測試中,當你調用方法時發送「David」。

相關問題