Rhino Mocks:有什么方法可以验证对象属性的属性约束吗?

时间:2020-03-05 18:57:05  来源:igfitidea点击:

如果我有

class ObjA {
  public ObjB B;
}
class ObjB {
  public bool Val;
}

class ObjectToMock {
  public DoSomething(ObjA obj){...}
}

有什么方法可以定义一个期望,它不仅会调用DoSomething,而且还会使obj.B.Val == true?

我试过了

Expect.Call(delegate { 
    mockObj.DoSomething(null);
}).Constraints(new PropertyIs("B.Val", true));

但是无论值是多少,它似乎都失败了。

解决方案

回答

我们可以尝试使用Is.Matching()并提供谓词约束(为清楚起见,移出了行):

Predicate nestedBValIsTrue = delegate(ObjA a) { return a.B.Val == true;};
    Expect.Call( delegate {mockobj.DoSomething(null);})
           .Constraints( Is.Matching(nestedBValIsTrue));