【发布时间】:2016-11-03 13:14:44
【问题描述】:
我正在使用 Moq 和 C# 进行单元测试。
我有以下实现要测试:
var jobsSelectionToMapJobModel = new List<Job>();
var jobsSelectionToMapDataTableModel =
_enumerableWrapperService.Select(jobsSelectionToMapJobModel,
x => _convertJobToJobsModelForDataTableService.Convert(umbracoHelper, x));
_enumerableWrapperService.Select() 中的 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);
//上面的问题是你没有断言正确的逻辑,因为它接受任何具有相同签名的 Func
单元测试示例 2
_listToReturn= new List<JobsModelForDataTable>();
_listOfJobs= new List<Job>();
GetMockFor<IEnumerableWrapperService>()
.Setup(x => x.Select(_listOfJobs,
It.Is<Func<Job, JobsModelForDataTable>>(f => ......)))
.Returns(_listToReturn);
//这可能是一个选项,但我不知道如何使它工作
或者也许我们需要以另一种方式重新考虑我们正在做什么?
如果我能对此进行测试,我将不胜感激。
提前感谢您的帮助。
【问题讨论】:
标签: c# linq unit-testing testing lambda