Почему макеты .NET не могут использовать new, чтобы скрыть не виртуальные методы для незапечатанных классов? - PullRequest
0 голосов
/ 01 сентября 2011

Например:

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

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

Я подозреваю, что проблема в том, что тестируемый класс использует базовый класс для своих переменных / параметров, и, следовательно, вызовы метода mocked-класса переходят к базовой версии вместотеневой версии:

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 Ответ

1 голос
/ 01 сентября 2011

Да, это правильно.

Тестируемый класс никогда не будет ссылаться на класс Proxy - он всегда будет ссылаться на базовый класс прокси (т. Е. Реальный класс).

...