Хорошо ли использовать запросы к базе данных в Rspec?

Я начал писать тесты с использованием Rspec для очень старого проекта. Все модели, которые я тестирую, - это ActiveRecords (бэкэнд - Oracle). Я читал некоторые блоги, в которых говорится, что мы должны использовать mocking и stubbing/fixtures/factory girl вместо запуска реального sql. Я смущен. Мне придется заглушить множество методов и создать множество объектов. Это хорошая практика?


person Rima    schedule 26.07.2012    source источник


Ответы (2)


Когда вы тестируете модель, хорошо, если ваши тесты интегрируются с базой данных. То есть не пытайтесь имитировать материал ActiveRecord, а просто используйте объект модели. FactoryGirl и Fabrication — это просто удобные ярлыки для создания реальных объектов модели, и они являются лучшими практиками, когда дело доходит до тестирования моделей ActiveRecord.

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

Однако при написании кода с TDD насмешки и заглушки имеют много преимуществ:

  • Дает вам подробные тесты (если метод не работает, ваши тесты говорят вам, какой именно)
  • Ваши тесты выполняются намного быстрее, и, следовательно, ваш цикл TDD короче.
  • Позволяет делать утверждения о том, как ваш код взаимодействует с другими объектами.
  • Если вам приходится чрезмерно заглушать и имитировать другие модели, чтобы изолировать одну модель, обычно это хороший признак того, что ваш код слишком сильно связан и заслуживает рефакторинга.
person cjhveal    schedule 26.07.2012
comment
Это именно то, что я искал, спасибо за совет! - person Khallil Mangalji; 31.07.2012

Обычно вы используете заглушки, тогда вы можете запускать тесты без загрузки AR, и они будут работать намного быстрее.

Лично я считаю, что тестирование поддельных данных - это не тест... Может быть, в среде разработки, выполняющей TDD... Может быть..., но для тестовой среды это должно быть как можно ближе к реальному.

Это, конечно, мое мнение, и оно может не совпадать с текущим мнением.

person cpuguy83    schedule 26.07.2012