模拟特定的基类方法

时间:2018-02-08 10:16:25

标签: c# .net unit-testing moq

我有一个场景,我很困惑如何模拟基类。

我的基类代码:

public class ParentClass
{
   public virtual int Sum()
   {
      return 0;
   }
}

我继承的类的代码:

public class ChildClass : ParentClass
{
    public override int Sum()
    {
        return 1 + base.Sum();
    }
}

现在我想测试继承的ChildClass.Sum()方法,但是想要模拟ParentClass.Sum()方法,以便它返回一些非零的固定值。

  

无法弄清楚可以做什么来告诉模拟对象模拟基类方法但是使用实际的实现来实现派生类方法。

这是我写的测试代码。

[TestClass]
public class ChildClassTest
{
    private Mock<ParentClass> _parentClassMock;


    [TestInitialize]
    public void Init()
    {
      _parentClassMock = new Mock<ParentClass>();
    }

    [TestMethod]
    public void GivenChildClass_WhenAdding_ThenResultShouldSumUp()
    {
        //Arrange
        SetupParentClassSumMethod();
        ChildClass child = new ChildClass();

        //Act
        int result = child.Sum();

        //Assert
        Assert.AreEqual(21, result);   
     }

     private void SetupParentClassSumMethod()
     {
        _parentClassMock.Setup(x => x.Sum()).Returns(20);
     }
}

Parent类仍将值返回为0。

我想做的是否可以实现?

1 个答案:

答案 0 :(得分:0)

我想做的是否可以实现?

不,我认为通过模拟父类无法实现这一点。你可以做的是创建一个子类的可测试类,并设置你想从基类返回的predict(satImage, model, filename="test.tif", progress='text', datatype='INT1U', type='prob', overwrite=TRUE) 的值。

Sum

然后测试看起来像这样。但这是你需要的吗?

public class ChildClassTestable : ChildClass
{
    public int SumOfParentReturnValue { set; get; }

    public override int Sum()
    {
        return 1 + SumOfParentReturnValue;
    }
}