我有一个正在测试的对象,它对数据访问对象进行了相当复杂的调用。它看起来像
object.DoSomething(somestring,someObject,someOtherObject,someOtherOtherObject)
在我的测试结构中,我有一个模拟版本的对象,我想测试Dosomething被调用somestring ==“value1”和someObject.porpertyA ==“value2”。
我不能使用简单的AssertWasCalled()重载,因为我不知道(或关心)someOtherObject。我注意到另一个重载需要一个设置约束的动作,但我从未见过它。
答案 0 :(得分:19)
一块蛋糕:
yourstub.AssertWasCalled(
x => x.DoSomething(
Arg<string>.Is.Equal("value1"),
Arg<someObjectType>.Is.Equal(value2),
Arg<someOtherObjectType>.Is.Anything, <======== NOTE THIS!
Arg<someOtherOtherObjectType>.Is.Equal(value3)
)
);
答案 1 :(得分:4)
查看documentation for constraints。
我怀疑你想要:
Expect.Call(object.DoSomething(null, null, null, null)
.IgnoreArguments() // Ignore those nulls
.Constraints(Is.Equal("value1"),
Property.Value("PropertyA", "value2"),
Is.Anything(),
Is.Anything())
.Return(whateverItShouldReturn);