Издевающиеся классы, которые не являются интерфейсами

StackOverflow https://stackoverflow.com/questions/131806

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

РиноМоксы или Мокк создаст тестовые двойники как для классов, так и для интерфейсов.Однако тип должен иметь виртуальные методы или быть абстрактным.А Типомок изолятор обходит эту проблему.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top