C# 我可以使用Moq来验证在复杂参数中使用特定值调用模拟方法吗?

C# 我可以使用Moq来验证在复杂参数中使用特定值调用模拟方法吗?,c#,unit-testing,parameters,moq,C#,Unit Testing,Parameters,Moq,假设我在模仿下面的类: public class ClassAParams { public int RequestedId { get; set; } public string SomeValue { get; set; } } public class ClassA { public void ExecuteAction(ClassAParams executeParams) {} } 现在假设我有另一个类(我们称之为ClassB),我正在为其创建单元测试,我想

假设我在模仿下面的类:

public class ClassAParams
{
    public int RequestedId { get; set; }
    public string SomeValue { get; set; }
}

public class ClassA
{
    public void ExecuteAction(ClassAParams executeParams) {}
}
现在假设我有另一个类(我们称之为
ClassB
),我正在为其创建单元测试,我想确保在调用
ClassB.Execute()
时,
ClassB
调用
ClassA.ExecuteAction()
但是我想确保调用该方法的参数的
ClassAParams.RequestedId
值为1

通常,我会通过执行
myMock.Verify(x=>x.ExecuteAction(newclassaparams{RequestedId=1,SomeValue=“something”})来处理这个问题

问题是,我不想在这个单元测试中检查
SomeValue
参数的值或任何其他
ClassAParams
属性。其他属性将在其他单元测试中检查,但必须验证在每个单元测试中使用正确的属性调用它(即使我不关心特定单元测试的范围),这将使单元维护变得烦人


有没有办法使用Moq来验证传递到模拟方法中的结构是否只有某些属性作为特定值,而忽略其他属性?

模拟存在重载。验证允许您测试某些内容的
。下面是一个对您的测试有用的示例

classA.Verify(
    a => a.ExecuteAction(
        It.Is<ClassAParams>(p => p.RequestedId == 12)
    )
);
classA.Verify(
a=>a.ExecuteAction(
It.Is(p=>p.RequestedId==12)
)
);
这意味着“对于作为参数传递的任何
ClassAParams
,请验证
RequestId
是否等于12”