我使用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
任何函数功能//这可能是一个选项,但我无法弄清楚如何使它工作
或者,也许我们需要重新思考我们以另一种方式在做什么?
我将不胜感激这方面的任何帮助,关于如何测试它。
预先感谢您的帮助。