C# 为什么我的模拟失败了?

C# 为什么我的模拟失败了?,c#,rhino-mocks,C#,Rhino Mocks,在下面的代码中,如果我理解正确,我会将Speed属性存根并将其设置为0,这应该调用Stop方法,但是当我运行测试时,它表示希望调用Stop,但没有调用它。代码如下: public class Car { public virtual int Speed { get; set; } public virtual bool Stopped() { if (Speed > 0) return false; S

在下面的代码中,如果我理解正确,我会将Speed属性存根并将其设置为0,这应该调用Stop方法,但是当我运行测试时,它表示希望调用Stop,但没有调用它。代码如下:

 public class Car
 {
    public virtual int Speed { get; set; }

    public virtual bool Stopped()
    {
        if (Speed > 0)
            return false;

        Stop();
        return true;
    }

    public virtual void Stop()
    {

    }
}

[TestFixture]
public class CarTests
{
    [Test]
    public void WhenSpeedIsZeroCarShouldBeStopped()
    {
        var carMock = MockRepository.GenerateMock<Car>();
        carMock.Stub(x => x.Speed).Return(0);
        carMock.Expect(x => x.Stop());

        carMock.VerifyAllExpectations();
    }
}

你没有调用
Stopped()
-那么,你会要求
Speed
属性还是调用
Stop()
?。

啊,这是有道理的,因为那会调用Stop(),duh。我怎样才能伪造它来调用Stopped?@Xaisoft:你肯定不想伪造对Stopped的调用。实际上,我不确定你在Rhino mock中是如何做到这一点的,因为你想要一个部分模拟,而我个人还没有这样做。我在测试的类中通常模拟依赖项,而不是虚拟方法。老实说,我一点也不确定这是一个使用嘲弄的好地方。我也不确定方法调用Stopped()是否应该实际调用Stop()-它不应该检查它是否已经停止,而不是主动停止它吗?如果速度为零,它不是已经停止了吗?我同意你所说的一切。事实上我只是在和犀牛嘲弄。我知道这是一个设计拙劣的代码。谢谢你的反馈。你实际上并没有对这辆车做什么。那么,您如何期望调用Stop()?这有点令人困惑,因为我对mocking还不熟悉。
Rhino.Mocks.Exceptions.ExpectationViolationException: Car.Stop(); Expected #1, Actual #0.
   at Rhino.Mocks.Impl.ReplayMockState.Verify()
   at Rhino.Mocks.MockRepository.Verify(Object obj)
   at Rhino.Mocks.RhinoMocksExtensions.VerifyAllExpectations(Object mockObject)
   at MockTutorial.CarTests.WhenSpeedIsZeroCarShouldBeStopped() in C:\Programming\Test\MockTutorial\MockTutorial\DirectoryInfoSample.cs:line 94