我有一个BLL对用户输入进行验证然后插入父(PorEO)然后插入子(PorBoxEO)。因此对同一个InsertJCDC有两个调用。一个像这样=> InsertJCDC(fakePor)和另一个像这样=> InsertJCDC(fakeBox)。
当我发布父母时,我想要返回fakePor。但是当我运行代码时,它返回null。这是单元测试。
[Test]
public void PorBLL_InsertByPorInsertCV_DoingGoodCase()
{
// Startup object mapper
_Bootstrapper.Bootstrap();
// create the mock for generic Crud
IGenericCrud mockGenericCrud = MockRepository.GenerateMock<IGenericCrud>();
PorInsertCV fakePor = new PorInsertCV();
PorBoxInsertCV fakeBox = new PorBoxInsertCV();
// build fake return
PorEO fakePorNewRow = new PorEO();
fakePorNewRow.PorId = 22;
// stub parent and child insert routines.
mockGenericCrud.Stub(c => c.InsertJCDC<PorEO, PorInsertCV>(fakePor)).Return(fakePorNewRow);
mockGenericCrud.Stub(c => c.InsertJCDC<PorBoxEO, PorBoxInsertCV>(fakeBox)).Return(null);
ObjectFactory.Inject(typeof(IGenericCrud), mockGenericCrud);
IPorBLL localWithMock = ObjectFactory.GetInstance<IPorBLL>();
// build user args to csll bll with and use for insert
PorInsertCV userArgs = new PorInsertCV();
userArgs.AccessionNbr = "364-80-0007";
userArgs.NbrBoxes = 11;
userArgs.RegId = 20;
userArgs.TransmitedDt = Convert.ToDateTime("1/30/1980");
// call the bll using the stub
localWithMock.InsertByPorInsertCV(userArgs);
}
非常感谢任何帮助
答案 0 :(得分:0)
我不能很好地遵循你的代码,但我会试一试。
根据我的演绎技巧,这一行是给你问题的那一行:
mockGenericCrud.Stub(c => c.InsertJCDC<PorEO, PorInsertCV>(fakePor)).Return(fakePorNewRow);
因为您在致电fakePorNewRow
时期望localWithMock.InsertByPorInsertCV(userArgs);
被退回 - 是吗?
如果这是你的情况,你的问题是,它只会在给出fakePorNewRow
而不是fakePor
给你的时候返回userArgs
。
告诉我,如果我完全偏离正轨。
HTHS,
查尔斯
聚苯乙烯。您可能希望将正在使用的模拟框架的标记添加到问题中。