我有一个类,例如 DerivedClass,它继承自基类,例如 BaseClass。BaseClass 实现了一个名为 IBaseClass 的接口。IBaseClass 有 1 个名为 TestProperty 的属性,它是一个整数自动属性。
我 PartialMultiMock DerivedClass 像这样:
derivedClassMock = repository.PartialMultiMock<DerivedClass>(typeof(IBaseInterface));
然后我设定如下期望:
derivedClassMock.Expect(d => d.TestProperty).Return(141);
但我不断收到以下异常:
“无效调用,已使用最后一次调用或未进行调用(确保您正在调用虚拟(C#)/可覆盖(VB)方法)。”
如果我将 BaseClass 中的 TestProperty 实现标记为虚拟,那么一切正常,但我试图理解为什么需要这样做。如果 DerivedClass 实现了 IBaseInterface 我不需要将其标记为虚拟来获得部分模拟功能。(至少我认为不是 - 如果我错了请纠正我)
然后我更进一步,尝试将 multi mock 转换为 IBaseInterface 并将期望设置如下:
var derivedInterface = (IBaseInterface) derivedClassMock;
derivedInterface.Expect(d => d.TestProperty).Return(1);
该测试现在可以正常运行,但从 TestProperty 返回的值不是 1,正如预期的那样,而是 0,即 int 的默认值。这向我暗示了类似于存根的行为。
如果可能的话,有人可以解释一下,以帮助我更好地理解这一点,因为我很困惑?我不能部分地模拟具有继承接口的类吗?为什么在接口上设置期望会表现出类似存根的行为?
提前致谢。