【问题标题】:How to mock Add method of subsonic's SimpleRepository如何模拟亚音速的 SimpleRepository 的 Add 方法
【发布时间】:2009-11-22 16:21:36
【问题描述】:

我正在尝试使用 Rihino 模拟模拟亚音速 SimpleRepository 的 Add 方法,我正在使用 IRepository 接口,但我是模拟新手,不知道如何从那里开始,可以这样做吗?感谢您的帮助。

【问题讨论】:

    标签: c# subsonic subsonic3 rhino-mocks


    【解决方案1】:

    AdamRalph 是正确的,但我更喜欢 Rhino Mocks 的 AAA 语法:

    // arrange
    var repo = MockRepository.GenerateStub<IRepository>();
    var myObject = CreateSampleObject();
    repo.Stub(r => r.Add(myObj)).Return(myObj);
    
    // act (this assumes that the call to "SomeMethod" on "SomeClass"
    // returns the result of the IRepository.Add).
    var someClass = new SomeClass(repo);
    var result = someClass.SomeMethod();
    
    // assert
    Assert.AreSame(myObject, result);
    

    【讨论】:

      【解决方案2】:

      这取决于您要测试的内容。您是否关心是否调用了 Add() 方法,或者您只是想设置一个可能会或可能不会被调用的预设响应?

      如果你期待电话:-

      var mocks = new MockRepository();
      var repo = mocks.StrictMock<IRepository>():
      
      var myObj = CreateSampleObject(); 
      
      using(mocks.Record())
      {
          Expect.Call(repo.Add(myObj)).Return(myObj);
      }
      
      using(mocks.Playback())
      {
          var target = CreateTarget(repo);
          target.DoSomething(myObj);
      }
      

      如果你不关心它是否被调用,那么使用SetUpResult而不是Expect,例如

      SetUpResult.For(rep.Add(myObj)).Return(myObj);
      

      【讨论】:

        猜你喜欢
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        相关资源
        最近更新 更多