Как я могу написать модульные тесты для метода, который имеет вызов базового метода в базовом объекте - PullRequest
2 голосов
/ 31 августа 2011

У меня есть следующий код:

class MyBase
{
    public virtual void foo()
    { ... }
}

class MyDerived : MyBase
{
   public override void foo()
   {
       ...
       base.foo();
       ...
   }
}

Как я могу проверить метод foo в MyDerived Class, не выполняя метод base.foo ()?

Ответы [ 4 ]

12 голосов
/ 31 августа 2011

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

(Это еще один случай, когда композиция дает больше контроля, чем наследования - если вместо этого ваш производный класс составил базовый класс, вы можете использовать макет или что-то еще вместо этого. Конечно, это не всегда уместно, но ...)

2 голосов
/ 31 августа 2011

Как насчет рефакторинга MyDerived, чтобы иметь методы DoPreFoo () и DoPostFoo ().Таким образом, foo может быть переписан для вызова этих функций, и вы можете использовать их для своих модульных тестов.Однако это немного уродливо.У меня такое ощущение, что MyDervied нужно агрегировать MyBase, а не извлекать из него, если функциональность нужно тестировать отдельно.

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

Если вам не нужно выполнять базовый метод в тесте, значит, в вашем дизайне что-то не так.

1 голос
/ 31 августа 2011

Короткий ответ: ты не можешь.Потому что вы не можете "издеваться" над этой зависимостью.

Может быть, в TypeMock Isolator есть некоторые хитрости API магического профиля, которые могут помочь, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...