升级到 Moq 上的接口不起作用

Upcasting to interfaces on Moq not working

我正在使用 moq 进行测试。我将对象upcast到它的接口,发现了一个问题。

下面是显示问题的测试。

我该如何更改它,以便当我将我的 Mock<Golf>.Object 投射到其接口之一时,我仍然可以访问 Model 属性?

默认情况下,当您 Mock 一个具体类型时,Moq 不会向下调用虚拟方法或实现接口。只有当您告诉它它可以调用基本实现时它才会这样做,否则它会假定您将在需要调用它们时设置这些方法。如果您将测试更改为以下内容,它将起作用:

[TestMethod]
public void InheritanceInterface_Test_WithMoq()
{
    string golfmodel = "gti";
    var golfMock = new Moq.Mock<Golf>(golfmodel);

    golfMock.CallBase = true;  // Tell the mock to call base methods

    var gti = golfMock.Object;
    var safeVehicle = gti as IVehicle;
    var vehicle = (IVehicle)gti;
    var safeCar = gti as ICar;
    var car = (ICar)gti;

    Assert.AreEqual(golfmodel, gti.Model, string.Format(" Model:{0} | Golf Model:{1}", golfmodel, gti.Model));
    Assert.AreEqual(gti.Model, safeVehicle.Model, string.Format("Golf Model:{0} | Vehicle Model:{1}", gti.Model, safeVehicle.Model));
    Assert.AreEqual(gti.Model, vehicle.Model, string.Format("Golf Model:{0} | Vehicle Model:{1}", gti.Model, vehicle.Model));
    Assert.AreEqual(gti.Model, safeCar.Model, string.Format("Golf Model:{0} | Carro Model:{1}", gti.Model, safeCar.Model));
    Assert.AreEqual(gti.Model, car.Model, string.Format("Golf Model:{0} | Carro Model:{1}", gti.Model, car.Model));
}