我使用Moq與C#進行單元測試。C#Moq單元測試與Lambda表達式或Func委託
我有以下的執行測試:
var jobsSelectionToMapJobModel = new List<Job>();
var jobsSelectionToMapDataTableModel =
_enumerableWrapperService.Select(jobsSelectionToMapJobModel,
x => _convertJobToJobsModelForDataTableService.Convert(umbracoHelper, x));
選擇方法在_enumerableWrapperService.Select()
具有以下特徵,像LINQ的一個:
Enumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source,
Func<TSource, TResult> selector);
我想測試我們選擇Func委託的內容具有正確的邏輯設置。 umbracoHelper變量是傳遞給此方法的外部參數。如果你使用It.IsAny<Func<TSource, TResult>>()
,我們不會斷言邏輯是好的。在另一方面,我想使用類似It.Is<Func<TSource,TResult>(func => XXXXXXXX)
的,但無法弄清楚如何使它工作
請參見下面的例子:
單位測試例1
_listToReturn= new List<JobsModelForDataTable>();
_listOfJobs= new List<Job>();
GetMockFor<IEnumerableWrapperService>()
.Setup(x => x.Select(_listOfJobs,
It.IsAny<Func<Job, JobsModelForDataTable>>()))
.Returns(_listToReturn);
//問題與上述是,你是未發出正確的邏輯,因爲它接受其具有相同簽名
UNIT試驗例2
任何函數功能//這可能是一個選項,但我無法弄清楚如何使它工作
或者,也許我們需要重新思考我們以另一種方式在做什麼?
我將不勝感激這方面的任何幫助,關於如何測試它。
預先感謝您的幫助。