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 的实例,如果是这样,您根本不需要伪造它们(使用真实实例...)
我创建了这样的模拟测试:
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 的实例,如果是这样,您根本不需要伪造它们(使用真实实例...)