structureMap模拟存根帮助

时间:2009-11-09 15:17:26

标签: asp.net asp.net-mvc structuremap

我有一个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);
        }

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我不能很好地遵循你的代码,但我会试一试。

根据我的演绎技巧,这一行是给你问题的那一行:

mockGenericCrud.Stub(c => c.InsertJCDC<PorEO, PorInsertCV>(fakePor)).Return(fakePorNewRow);

因为您在致电fakePorNewRow时期望localWithMock.InsertByPorInsertCV(userArgs);被退回 - 是吗?

如果这是你的情况,你的问题是,它只会在给出fakePorNewRow而不是fakePor给你的时候返回userArgs

告诉我,如果我完全偏离正轨。

HTHS,
查尔斯

聚苯乙烯。您可能希望将正在使用的模拟框架的标记添加到问题中。