C# 具有接受对象列表功能的Moq设置,如何定义可接受的对象ID?

C# 具有接受对象列表功能的Moq设置,如何定义可接受的对象ID?,c#,unit-testing,moq,C#,Unit Testing,Moq,我有以下最低起订量服务。其中一个函数接受各种参数,但其中一个是列表,其中MtObject具有Id。我试图定义Moq应该接受的实际对象,以便返回我想要为该对象返回的内容,但它不起作用-没有返回任何内容-我想知道这是否是因为提供的对象不是我们调用Moq服务时使用的确切对象-因此我将尝试在中指定MyObject.Id安装程序很简单,但我不知道怎么做 这是我的原创作品: myService.Setup(s => s.GetSomeStuff( It.IsAny<Reference&g

我有以下最低起订量服务。其中一个函数接受各种参数,但其中一个是
列表,其中
MtObject
具有
Id
。我试图定义Moq应该接受的实际对象,以便返回我想要为该对象返回的内容,但它不起作用-没有返回任何内容-我想知道这是否是因为提供的对象不是我们调用Moq服务时使用的确切对象-因此我将尝试在中指定
MyObject.Id
安装程序很简单,但我不知道怎么做

这是我的原创作品:

myService.Setup(s => s.GetSomeStuff(
    It.IsAny<Reference>(),
    new List<MyObject>() { fakeMyObject1, fakeMyObject2 },
    anotherThing,
    number))
.Returns(MyResponse).Verifiable();
或者你认为最初的解决方案应该有效吗?或者还有其他选择吗

我想知道这是否是因为提供的对象与我们调用Moq服务时使用的对象不同

这是正确的。因为参数实例与mock不匹配,所以mock不会按需要运行

使用带有谓词的
It.Is()
参数匹配器来匹配所需的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();
myService.Setup(\u=>\ u0.GetSomeStuff(
It.IsAny(),
它是(x=>

x、 Any(y=>y.Id==fakeObject1.Id | | y.Id==fakeObject2.Id)//Awesome-正是我所需要的。开始看这个答案,我无法编辑到我所需要的-你的是一个很好的例子
 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();