Как проверить модуль ruby ​​Mixin? - PullRequest
12 голосов
/ 19 мая 2010

Я хотел бы знать, как лучше всего подходить к тестированию ruby ​​mixin modules , в данном случае для использования с моделями ActiveRecord, но на самом деле это общий вопрос, который применим к любому расширяемому классу с миксином.

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

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

Мнения

1 Ответ

23 голосов
/ 19 мая 2010

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

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

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

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

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