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