2011-02-03 113 views
5

我正在努力解決這個模擬(使用Moq框架)的東西如何工作,但我已經變得有點困惑與返回無效的方法。Moq無效方法

原始對象具有以下方法/屬性:

void Add(Person entity); 
void Save(); 
IQueryable<Person> Persons; 

Add方法調用InsertOnSubmit(它的LINQ to SQL),以及保存方法調用Context.SubmitChanges()。該人的財產返回Table<News>對象。

我不知道我怎麼去嘲笑這些方法,但是,因爲我顯然不能使用Returns()

或者我的設計是否意味着我實際上不能正確模擬對象?

+0

沒有進一步的背景,給出一個很好的答案是有點困難。 – mfloryan 2011-02-11 10:39:52

回答

3

這取決於你打算測試什麼。

當你想測試交互之間的Moq可以幫助你顯着被測試的類和其他類。

在你描述的情況下,你可能正在測試一個正在使用上面提到的方法和屬性的類。要驗證要檢查的交互是否使用預期參數調用Add方法,調用Save方法並且引用Persons屬性以讀取結果。這可以通過以下方式來實現:

var mockedClass = new Mock<IDaoClass>(); 
var classUnderTest = ... 

mockedClass.SetupGet(m => m.Persons).Returns(new List<Person>().AsQueryable()); 

classUnderTest.DoSomething(); 

mockedClass.Verify(m => m.Add(It.IsAny<Person>())); 
mockedClass.Verify(m => m.Save()); 

如果你想測試別的東西,並提供一個存根實現這兩個方法,那麼你可能想只建立一個測試實施或考慮使用起訂量的設置與功能用lambda表示,而不是簡單的設置。