Понимание модульного тестирования Rails: все еще является модульным тестом, если один тест проверяет взаимозависимости модели? - PullRequest
1 голос
/ 14 декабря 2009

Помимо того факта, что Rails включает уровень базы данных в модульные тесты (которые тогда строго не являются модульными), что делать, если я проверяю взаимозависимости моделей, например проверить, действительно ли has_many / belongs_to с :dependent => :destroy уничтожает связанные элементы или элементы из моделей объединения, чтобы не оставлять сирот вокруг?

Может быть, лучше провести такой тест в функциональных или интеграционных тестах?

Или спросили по-другому: есть ли руководство с примерами, какие виды испытаний должны проходить, где и почему? Я не нашел ничего действительно полезного.

Ответы [ 2 ]

1 голос
/ 14 декабря 2009

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

Вы всегда можете смоделировать действия (с такими драгоценными камнями, как Mocha или Flexmock), чтобы избежать вызова методов на самом деле, но вы хотите убедиться, что ожидаемое поведение происходит. (Например, выполняется вызов MyClass.create или MyClass.destroy). Это особенно верно для тестов контроллера / представления, где я часто буду издеваться над вызовом модели.

По моему опыту, у меня обычно нет проблем с моделями и ассоциациями, использующими базу данных. Возможно, вы захотите взглянуть на Factory Girl или какую-то альтернативу осветительным приборам, которые облегчают управление тестовыми объектами / данными.

0 голосов
/ 14 декабря 2009

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

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