犀牛模拟覆盖存根可能吗?

Dav*_*vid 10 unit-testing rhino-mocks

我有这个问题,这可能是Rhino Mocks 3.5中的一个错误:

stubObj = MockRepository.GenerateStub(IObject);

stubObj.Stub(a=>a.Get()).Return (Guid.Empty); //1.stub
stubObj.Stub(a=>a.Get()).Return (Guid.NewGuid()); //2.stub, should overwrite the first one?
Run Code Online (Sandbox Code Playgroud)

这个:

var value = stubObj.Get(); 
Run Code Online (Sandbox Code Playgroud)

返回Guid.Empty,这是正确的行为吗?

Grz*_*nio 8

如果你想要返回空guid已知的次数,你唯一需要做的就是告诉RhinoMocks多少次重复它,例如以下测试通过:

[Test]
    public void MultipleStubsTest()
    {
        var testMock = MockRepository.GenerateMock<ITest>();
        testMock.Stub(x => x.Get()).Return(Guid.Empty).Repeat.Once();
        testMock.Stub(x => x.Get()).Return(Guid.NewGuid());

        Assert.AreEqual(Guid.Empty, testMock.Get());
        Assert.AreNotEqual(Guid.Empty, testMock.Get());
    }
Run Code Online (Sandbox Code Playgroud)

如果你不知道在guid改变之前会调用多少次Get(),那么你总是可以使用.Do()并在那里编码(如果你需要更多细节,请告诉我).


Dar*_*rov 0

应通过以下测试:

// arrange
var stubObj = MockRepository.GenerateStub<IObject>();
stubObj.Stub(a => a.Get())
       .Return(Guid.Empty);
// act
var value = stubObj.Get();
// assert
Assert.AreEqual(Guid.Empty, value);
Run Code Online (Sandbox Code Playgroud)

如果你想返回一个新的指南:

// arrange
var stubObj = MockRepository.GenerateStub<IObject>();
stubObj.Stub(a => a.Get())
       .Return(Guid.NewGuid());
// act
var value = stubObj.Get();
// assert
Assert.AreNotEqual(Guid.Empty, value);
Run Code Online (Sandbox Code Playgroud)