Rhino 模拟测试中的 GetField 值

GetField value in Rhino Mock tests

我创建了这样的模拟测试:

IGroup studentGrp = MockRepository.GenerateMock<IGroup>();
stubApplication.Stub(x => x.GetGroup("STUDENT"))
               .Return(studentGrp);
studentGrp.Stub(x => x.EntityCount)
          .Return(1);
stubApplication.Stub(x => x.GetGroup("STUDENT").GetEntity(0).GetField("role_numb"))
               .Return(genericFieldValue);

代码:

for(int i = 0; i < StudentApplication.GetGroup("STUDENT").EntityCount; i++)
{
    if (StudentApplication.GetGroup("STUDENT").GetEntity(i).GetField("role_num").GetInternalValue() == "Y")
    {
        //Do Something.. 
    }
}

但我无法 运行 上面的代码继续获取:NullReferenceException。

RhinoMocks 不支持 lambda 聚合:

stubApplication.Stub(x => x.GetGroup("STUDENT").GetEntity(0).GetField("role_numb"))
           .Return(genericFieldValue);

以上代码片段在 Rhinomocks 中不起作用(Moq 支持 lambda 聚合)。

您需要拆分 lambda:

stubApplication.Stub(x => x.GetGroup("STUDENT"))
           .Return(studentGrp);
studentGrp.Stub(x => x.GetEntity(0))
          .Return(fakeEntity);
fakeEntity.Stub(x => x.GetField("role_numb"))
          .Return(fakeField);
fakeField.Stub(x => x.GetInternalValue())
         .Return("Y");

顺便说一句,仅通过阅读对象和方法的名称,似乎所有实例都是 PoCos 的实例,如果是这样,您根本不需要伪造它们(使用真实实例...)