Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试派生类时模拟基属性_C#_Mocking - Fatal编程技术网

C# 测试派生类时模拟基属性

C# 测试派生类时模拟基属性,c#,mocking,C#,Mocking,假设我有两个类: public class Class { } public class ClassParser { public virtual string ParsedClass { get; } public ClassParser(Class c1) { ParsedClass = DoParsing(c1); } private string DoParsing(Class c1) { return

假设我有两个类:

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");
Mock specialParser=新的Mock(c1,1);
specialParser.Setup(p=>p.ParsedClass_InBaseClass)
.Returns(“基类对c1进行了大量计算,得到了这个解析字符串”);
有什么办法可以实现吗?
谢谢您的帮助。

库具有
CallBase
属性,如果您正在使用此库,我将使用moq。但是,我不希望派生类调用base,因为它实际上会调用“ProcessInBaseClass”方法并处理字符串。我想手动设置基类属性返回的值。这是一个设计问题。当前的设计考虑不周,测试时遇到的困难暴露了原始的底层代码气味。我建议您首先通过询问为什么需要绕过基类来回顾您的设计选择。如果这个简化的示例不是实际问题的真实表示,那么如果您可以共享一个示例,那么我们就可以更清楚地了解当前问题以及您实际想做的事情了。我认为您应该改变在这种情况下,我并不认为在库中使用继承有什么好处,如果您使用这个库,我使用的是moq。但是,我不希望派生类调用base,因为它实际上会调用“ProcessInBaseClass”方法并处理字符串。我想手动设置基类属性返回的值。这是一个设计问题。当前的设计考虑不周,测试时遇到的困难暴露了原始的底层代码气味。我建议您首先通过询问为什么需要绕过基类来回顾您的设计选择。如果这个简化的示例不是实际问题的真实表示,那么如果您可以共享一个示例,那么我们就可以更清楚地了解当前问题以及您实际想做的事情了。我认为您应该改变在这种情况下,我并不认为在这里使用继承有什么好处