代码之家  ›  专栏  ›  技术社区  ›  AndyM

如何基于接口创建模拟对象并设置只读属性?

  •  0
  • AndyM  · 技术社区  · 16 年前

    我是TDD的新手。因此,任何帮助都将不胜感激。我用的是NUnit和Rhino Mock。

    我看了一下: http://www.iamnotmyself.com/2008/06/26/RhinoMocksAndReadOnlyPropertyInjectionPart2.aspx 但是反射似乎对接口不起作用。

        public interface IBatchInfo
        {
            int ID { get;}
            Branches Branch { get; set; }
            string Description { get; set; }                                
        }
    
     [SetUp]
           public void PerFixtureSetup()
           {
    
               _mocks = new MockRepository();
               _testRepository = _mocks.StrictMock<IOLERepository>();
    
           }
    
        [Test]
                public void ItemsAreReturned()
                {
                    IBatchInfo aBatchItem=  _mocks.Stub<IBatchInfo>();
    
                    aBatchItem.ID = 1; //fails because ID is a readonly property
                    aBatchItem.Branch = Branches.Edinburgh;
    
    
                    List<IBatchInfo> list = new List<IBatchInfo>();
    
                    list.Add( aBatchItem);
    
                    Expect.Call(_testRepository.BatchListActive()).Return(list);
                    _mocks.ReplayAll();
    
                    BatchList bf = new BatchList(_testRepository, "usercreated", (IDBUpdateNotifier)DBUpdateNotifier.Instance);
                    List<Batch> listofBatch = bf.Items;
    
                    Assert.AreEqual(1, listofBatch.Count);
                    Assert.AreEqual(1, listofBatch[0].ID);
                    Assert.AreEqual( Branches.Edinburgh,listofBatch[0].Branch);
                }
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   AndyM    16 年前

    在这里找到了答案 http://haacked.com/archive/2007/05/04/setting-propertybehavior-on-all-properties-with-rhino-mocks.aspx .

    简单,而不是

    aBatchItem.ID=1;
    

    使用:

    SetupResult.For(aBatchItem.ID).Return(1);
    
        2
  •  1
  •   AndyM    16 年前

    aBatch.Stub(x => x.ID).Return(0);