首页 > 解决方案 > 在测试派生类时模拟基属性

问题描述

假设我有两个类:

public class Class { }

public class ClassParser
{
    public virtual string ParsedClass { get; }

    public ClassParser(Class c1)
    {
        ParsedClass = DoParsing(c1);
    }

    private string DoParsing(Class c1)
    {
        return "Class parsed";
    }
}

public class SpecialClassParser : ClassParser
{
    public override string ParsedClass => SwitchIdx();

    private readonly int _suffixIdx;

    public SpecialClassParser(Class c1, int suffixIdx)
        : base(c1)
    {
        _suffixIdx = suffixIdx;
    }

    private string SwitchIdx()
    {
        return _suffixIdx switch
        {
            1 => (base.ParsedClass + " With case 1 suffix"),
            2 => (base.ParsedClass + " With case 2 suffix"),
            _ => null
        };
    }
}

通过此功能演示:

private void DoParsings()
{
    Class c1 = new Class();
    string withClassParser = (new ClassParser(c1)).ParsedClass;
    // "Class parsed"
    string withSpecialClassParser_1 = (new SpecialClassParser(c1, 1)).ParsedClass;
    // "Class parsed With case 1 suffix"
    string withSpecialClassParser_2 = (new SpecialClassParser(c1, 2)).ParsedClass;
    // "Class parsed With case 2 suffix"
}

我想测试派生类属性,以便派生类在初始化后正确处理基类属性。我希望能够模拟基本属性解析。

模拟设置的伪代码:

Mock<SpecialClassParser> specialParser = new Mock<SpecialClassParser>(c1, 1);
specialParser.Setup(p => p.ParsedClass_InBaseClass)
             .Returns("Base class did a lot of calculations on c1 and came up with this parsed string");

有没有办法让它发生?感谢您的帮助。

标签: c#mocking

解决方案


推荐阅读