Как смоделировать защищенный метод в базовом классе, используя Rhino? - PullRequest
0 голосов
/ 03 октября 2018
internal abstract class ClassB: IInterface
{
    protected void Execute();
}

abstract class ClassA : ClassB
{
    public void methodToUT()
    {
        ---logic that I want to unit test----
        Execute();
    }
}

Я хочу провести модульное тестирование methodToUT().Однако я не могу издеваться / заглушки Execute(), используя Rhino, так как он защищен.Я попытался создать вспомогательный класс, который реализует ClassB и переопределил Execute(), чтобы я мог его высмеять.Однако затем я получаю сообщение об ошибке «Недопустимый вызов, последний вызов был использован или не было сделано (убедитесь, что вы вызываете виртуальный (C #) / Overridable (VB) метод)».

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 03 октября 2018

Модульные тесты имеют привычку разоблачать проблемы проектирования.

Если этот член может быть реорганизован в virtual или abstract

abstract class ClassB: IInterface {
    protected virtual void Execute();
}

, так что его можно переопределить в производном классе, тогда

заглушка можетбыть созданным

public class StubClass: ClassA {
    protected override void Execute() {
        //...Do nothing
    }
}

В противном случае вы сможете заменить желаемый элемент ключевым словом new, если не сможете его переопределить.

public class StubClass: ClassA {
    protected new void Execute() {
        //...Do nothing
    }
}

для целей тестирования

//Arrange
var subject = new StubClass(); 

//Act
subject.methodToUT();

//...
...