有三個類如下:
public interface IRepository1{}
public interface IService{
public void Function1(List<int> ids);
public void Function2(T xxInfo)
}
public class Service{
public IRepository1 Repository1 {get;set;}
public void Function1(List<int> ids)
{
var list = this.Repository1.GetList(ids) //這個是可以Mock的
foreach(var item in list){
this.Function2(item) //這個應該怎么模擬
}
}
}
單元測驗的時候,我實體化一個Service,然后Mock一個IRepository1,來偽造GetList,回傳模擬的資料
但是,后續回圈呼叫了Service.Function2()
我怎么捕獲Function2()的內容?替換里面的運行代碼?
我用的是Moq
//arrange
Service service = new Service();
var mockRepository1 = new Mock<IRepository1>();
mockRepository1.Setup().Returns();
service.IRepository1 = mockRepository1.Object()
//act
service.Function1(new List<int>{1,2});
//assert
uj5u.com熱心網友回復:
Function2是Service的實作,你要測驗Service類,應該Mock Function2依賴的功能。uj5u.com熱心網友回復:
嗯,主要是,不想MockFunction2里面的依賴,因為Function2,已經有一個對應的單元測驗了。
我想測驗Function1的內容,然后傳遞到Function2就結束,不需要重復測驗Function2里面的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/90654.html
標籤:C#
下一篇:用戶代碼未處理 EntityException “System.Data.Entity.Core.EntityException”型別的例外在 mscorlib
