Насмешливые классы, которые не являются интерфейсами - PullRequest
7 голосов
/ 25 сентября 2008

Я писал некоторые провайдеры в c #, которые наследуются от класса providerbase. Я обнаружил, что сложно писать тесты, использующие провайдеров, так как большинство фальшивых фреймворков позволяют только имитировать интерфейс.

Можно ли каким-нибудь образом смоделировать звонок провайдеру, который наследует от базы провайдеров?

Если нет, могу ли я использовать шаблон для реализации насмешек над провайдерами?

Ответы [ 3 ]

6 голосов
/ 25 сентября 2008

Я знаю, что насмешки Rhino тоже могут насмехаться над классами, с большинством других фреймворков с этим тоже не должно быть проблем.
Имейте в виду также: класс не может быть запечатан. Вам нужно пометить методы, которые вы хотите виртуально смоделировать, и классу нужен конструктор без аргументов, которые можно защитить, private не будет работать. (только что попробовал)

Имейте в виду, что фреймворк просто создаст класс, который наследуется от вашего класса и создает объект этого типа. Так что конструкторы будут вызывать. Это может вызвать неожиданное поведение в ваших тестах.

6 голосов
/ 25 сентября 2008

Фреймворки Mocking должны иметь возможность создавать для вас фиктивный объект на основе класса, если у него есть виртуальные члены.

Вы также можете взглянуть на Typemock

1 голос
/ 28 сентября 2008

RhinoMocks или Moq создаст двойные тесты для классов, а также для интерфейсов. Тип должен иметь виртуальные методы или быть абстрактным. Изолятор Typemock справляется с этим.

Я бы предположил, что объекты, которые вы хотите смоделировать, вероятно, должны быть абстрактными ( принцип обращения зависимостей ).

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