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”