我写过这样的课程:
public class A
{
public virtual int LowLimit { get; set; }
internal virtual bool CheckLimit(int measurement)
{
return LowLimit <= measurement;
}
}
并测试它:
MockRepository mocks = new MockRepository();
var limit = mocks.StrictMock<A>();
Expect.Call(limit.CheckLimit(2)).Return(true).Repeat.Once();
mocks.ReplayAll();
limit.CheckLimit(2);
mocks.VerifyAll();
它失败了: System.InvalidOperationException:类型'System.Boolean'与方法'A.get_LowLimit();'
的返回类型'System.Int32'不匹配但是当我将CheckLimit方法的内部关键字替换为public时,它可以正常工作。 为什么这样做?
答案 0 :(得分:3)
如果您使用的是外部库( StrictMock ),则无法访问任何内部方法。
看起来 StrictMock 实现正在尝试使用A的 CheckLimit ,但因为找不到实现可能会使用自己的实现,它使用A的 LowLimit时强>