Rhino – 模拟类而不是覆盖虚方法

如果我正在嘲笑一个类,如下所示,有什么方法可以让模拟重写虚方法? 我知道我可以简单地删除虚拟修饰符,但实际上我想在以后删除此方法的行为。

换句话说,除了删除虚拟修饰符之外,我怎样才能通过此测试:

namespace Sandbox { public class classToMock { public int IntProperty { get; set; } public virtual void DoIt() { IntProperty = 1; } } public class Foo { static void Main(string[] args) { classToMock c = MockRepository.GenerateMock(); c.DoIt(); Assert.AreEqual(1, c.IntProperty); Console.WriteLine("Pass"); } } 

}

您想要使用部分模拟 ,它只会在您创建期望时覆盖该方法:

 classToMock c = MockRepository.GeneratePartialMock(); c.DoIt(); Assert.AreEqual(1, c.IntProperty); 

我在这里看到了几件事。

首先,你正在嘲笑一个具体的类。 在大多数情况下,这是一个坏主意,通常表明您的设计存在缺陷(恕我直言)。 如果可能,提取一个接口并模拟它。

其次,虽然从技术上来说 ,模拟是覆盖虚拟方法,但是通过提供一个实现(在这种情况下什么都不做),可能会更好地考虑它正在做什么实际上是在模拟/伪造方法。 通常,在模拟对象时,需要为测试用例对象所需的每个属性或方法提供实现。

更新:此外,我认为删除“虚拟”将阻止框架对该方法执行任何操作。