Чтобы я использовал Moq, все мои классы должны реализовать интерфейс?

Я хочу использовать Moq, но я использую Nhibernate, и я не создал интерфейсы для всех своих Образцовых классов (ПОСТЕПЕННО классы).

Я должен создать интерфейс для каждого класса для меня для сможения к moq моего ПОСТЕПЕННО классы?

5
задан Finglas 13 January 2010 в 21:51
поделиться

2 ответа

Вы можете насмехаться над виртуальными методами, но лучше всего , если вы используете интерфейс.

Причина, по которой я говорю, следующая:

var mockObject = new Mock<IMyObject>();

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

var mockObject = new Mock<MyObject>(params...);

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

Добавлю, что, пытаясь насмехаться над конкретными типами, вы побеждаете цель насмехаться над фреймворками. Вы должны быть насмешливыми ролями, а не типами. Поэтому работая на абстракцию, в данном случае интерфейс - это очень хорошо.

Другая причина в том, как работают интерфейсы, интерфейсы констатируют контракт, но не поведение. Их следует использовать, когда у вас несколько реализаций, а я классифицирую тестирование как поведение, отсюда веская причина для введения нового интерфейса.

8
ответ дан 14 December 2019 в 01:09
поделиться

Классы/методы, над которыми Вы издеваетесь, либо нуждаются в реализации интерфейса, либо являются виртуальными. Вы можете тестировать любой класс/метод до тех пор, пока он доступен, но нет способа насмехаться над чем-то, что нельзя переопределить или реализовать явно.

1
ответ дан 14 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: