【问题标题】:GetField value in Rhino Mock testsRhino Mock 测试中的 GetField 值
【发布时间】:2016-05-25 20:29:48
【问题描述】:

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

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。

【问题讨论】:

  • 如果您使用变量和单独的语句而不是链接所有这些方法调用,例如 var entity = StudentApplication.GetGroup("STUDENT").GetEntity(i); 可能有助于调试var field = entity.GetField("role_num"); - 你明白了
  • @AlexandruMărculescu 你在不知不觉中提供了答案...... Rhinomocks 不支持 lambda 聚合......我在回答中解释了更多

标签: c# unit-testing mocking rhino-mocks


【解决方案1】:

RhinoMocks 不支持 lambda 聚合:

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

上面的 sn-p 在 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 的实例,如果是这样,您根本不需要伪造它们(使用真实实例...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多