Подтвердить что ты не робот

Как протестировать Rubin Mixin Module?

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

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

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

мнения?

4b9b3361

Ответ 1

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

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

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

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