我有以下Moq服务。其中一个函数接受各种参数,但其中一个是List<MyObject>
,其中MtObject
具有Id
。我试图定义Moq应该接受的实际对象,以便返回我想要为该对象返回的内容,但它不起作用 - 没有返回任何内容 - 我想知道是否因为提供的对象不是我们调用Moq服务时使用的确切对象 - 所以我将尝试在设置中指定MyObject.Id
,但我无法弄清楚如何操作。
这是我原来的:
myService.Setup(s => s.GetSomeStuff(
It.IsAny<Reference>(),
new List<MyObject>() { fakeMyObject1, fakeMyObject2 },
anotherThing,
number))
.Returns(MyResponse).Verifiable();
上面的回复null
,如果我使用It.IsAny<List<MyObject>>()
,那么我会收到回复,但我需要根据传入的MyOject
获得不同的回复。
为了指定fakeObject1.Id
和fakeObject2.Id
而不是对象,我应该替换此行?
new List<MyObject>() { fakeMyObject1, fakeMyObject2 }
或者您认为原始解决方案应该有效吗?或者还有另一种选择吗?
答案 0 :(得分:2)
我想知道是否因为提供的对象不是我们调用Moq服务时使用的确切对象
这是正确的。因为参数实例与模拟不匹配,所以不会按预期运行。
将It.Is<T>()
参数匹配器与谓词匹配,以匹配所需的ID
myService.Setup(_ => _.GetSomeStuff(
It.IsAny<Reference>(),
It.Is<List<MyObject>>(x =>
x.Any(y => y.Id == fakeObject1.Id || y.Id == fakeObject2.Id) //<-- or something else
),
anotherThing,
number))
.Returns(MyResponse)
.Verifiable();