为什么.NET模拟框架不能使用new来隐藏非密封类的非虚方法?

时间:2011-09-01 06:49:13

标签: .net class frameworks mocking concrete

例如:

public class ThirdPartyClass
{
    public void DoSomething() { ... }
}

// Mock framework generated class
public class MockThirdPartyClass : ThirdPartyClass
{
    public new void DoSomething() { // Mock user's deletegate goes here }
}

我怀疑问题是被测试的类使用基类作为其变量/参数,因此对模拟类'方法的调用转到基本版本而不是阴影版本:

public class MyClass
{
    private ThirdPartyClass tpc;

    public MyClass() { }

    public MyClass(ThirdPartyClass tpc)
    {            
        this.tpc = tpc;
    }

    public void MyClassDoesSomething()
    {
        this.tpc.DoSomething(); // Bypasses MockThirdPartyClass shadow method
    }

这是对的吗?

1 个答案:

答案 0 :(得分:1)

是的,这是正确的。

被测试的类永远不会引用Proxy类 - 它总是会引用代理的基类(即真正的类)。