如何模拟亚音速的SimpleRepository的Add方法

时间:2009-11-22 16:21:36

标签: c# subsonic subsonic3 rhino-mocks

我正在尝试使用Rihino模拟来模拟亚音速SimpleRepository的Add方法,我正在使用IRepository接口,但我是嘲笑并且不知道如何从那里开始,这可以做到吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:1)

这取决于你想要测试的内容。您是否关心是否调用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);