2017-08-06 50 views
1

所以,當有一個返回值,我可以起訂量如何運行函數時返回值是無效時設置的起訂量

mockStudentRepository.Setup(m => m.Create(It.IsAny<IStudent>())).Returns<IStudent>(s => 
{ 
    students.Add(s); 
    return 1; 
}); 

所以這拉姆達被傳開,模擬實現的存儲庫這樣做。

當一個方法返回void時,我該怎麼做?當我嘗試相同的代碼時,退貨不可用。我現在有這樣的事情:

mockStudentRepository.Setup(m => m.Update(It.IsAny<IStudent>())); 

我想把一個lambda運行時,更新被稱爲非常像上面的第一個代碼。我怎樣才能做到這一點?

+0

你試過了什麼?開始測試你的代碼而不嘲笑m.Update –

+0

對不起,這完全是我的意圖,嘲笑這種方法。我不想爲它運行實際的代碼,我只是想讓它運行一個虛假的實現。我所嘗試的是我創建了一個假實現Student儲存庫,確實有效,但我想爲該方法運行一個lambda,而不是實現Student Repository。 –

+3

您是否在尋找回撥方法?也許[QuickStart](https://github.com/Moq/moq4/wiki/Quickstart)頁面有一個適合您需求的示例。 –

回答

1

我相信你正在尋找Callback擴展名。

mockStudentRepository 
    .Setup(m => m.Update(It.IsAny<IStudent>())) 
    .Callback<IStudent>(s => { 
     var student = students.Where(x => x.Id == s.Id).FirstOrDefault(); 
     if(student != null) { 
       //... 
     } 
    });