Как я тестирую рубиновый Модуль Mixin?

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

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

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

Мнения?

12
задан Daniel Beardsley 18 May 2010 в 21:22
поделиться

1 ответ

Мне не совсем понятно, о чем вы спрашиваете, но я предполагаю, что это что-то вроде: «Если у меня есть класс, и я расширяю этот класс с помощью модуля, где я должен протестировать функциональность, предоставляемая модулем? »

Лично, когда я пишу модуль для использования в качестве миксина, я стараюсь обеспечить его достаточно надежное тестирование независимо от тех классов, с которыми я мог бы в конечном итоге запланировать его смешивание. Обычно я определяю класс в наборе тестов, который ничего не делает, кроме расширения до модуля, а затем пишу тесты, чтобы гарантировать, что тестовый класс имеет все ожидаемые функциональные возможности. (Вы можете увидеть примеры этого в моем геме Classy , который представляет собой просто набор модулей mixin.) Если модуль должен был расширять ActiveRecord или какой-либо другой класс, над которым я не имел никакого контроля, я Я бы по возможности определил как ванильный класс ActiveRecord и работал бы с ним, хотя в идеале я бы попытался сохранить функциональность моего модуля, ортогональную ActiveRecord, когда это возможно.

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

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

23
ответ дан 2 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

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