簡體   English   中英

Moq是一種無效方法

[英]Moq a void method

我試圖弄清楚這個Mock(使用Moq框架)的東西是如何起作用的,但是我對返回void的方法感到有些困惑。

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

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

Add方法調用InsertOnSubmit (它的Linq為sql),Save方法調用Context.SubmitChanges() Person的屬性返回Table<News>對象。

我不知道如何模仿這些方法,因為我顯然不能使用Returns()

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

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

當您想要測試被測試的類與其他類之間的交互時,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());

如果您想測試其他內容並提供這些方法的存根實現,那么您可能只想創建一個測試實現,或者考慮將Moq設置與表達為lambda而不是簡單設置的函數一起使用。

暫無
暫無

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

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