2009-11-09 59 views
0

我有一个BLL对用户输入进行验证,然后插入父项(PorEO),然后插入子项(PorBoxEO)。所以有两个调用相同的InsertJCDC。像这样=> InsertJCDC(fakePor),另一个像这样=> InsertJCDC(fakeBox)。structureMap mocks stub help

当我剔除父项时,我想返回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

你究竟想要测试什么?我没有看到任何断言。 – 2009-11-09 16:45:44

回答

0

我真的不能按照你的代码,很好,但我给它一个镜头。

从我演绎的技巧,在这里这条线是一个给你的问题:

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

因为你期待fakePorNewRow当你调用localWithMock.InsertByPorInsertCV(userArgs);要返回 - 是吗?

如果这是你的情况,你的问题是,它只会返回fakePorNewRow当它给予fakePor ...不是userArgs,因为你已经给它。

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

HTHS,
查尔斯

诗篇。您可能想要将您正在使用哪个模拟框架的标签添加到问题中。