2012-01-10 3 views
3

Я только начинаю изучать практику BDD/TDD (мир радуется, я знаю). Одной из вещей, с которой я борюсь, на данный момент является то, что тесты на самом деле стоит писать. Давайте рассмотрим каждый из набора тестов, которые я начал для модели под названием Sport:Начало работы с BDD/TDD (Rails/Rspec)

Factory.define :sport do |f| 
    f.name 'baseball' 
end 


require 'spec_helper' 

describe Sport do 

    before(:each) do 
    @sport_unsaved = Factory.build(:sport) # returns an unsaved object 
    @sport_saved = Factory.create(:sport) # returns a saved object 
    end 

    # Schema testing. 
    it { should have_db_column(:name).of_type(:string) } 
    it { should have_db_column(:created_at).of_type(:datetime) } 
    it { should have_db_column(:updated_at).of_type(:datetime) } 

    # Index testing. 

    # Associations testing. 
    it { should have_many(:leagues) } 

    # Validations testing. 
    it 'should only accept unique names' do 
    @sport_unsaved.should validate_uniqueness_of(:name) 
    end 

    it { should validate_presence_of(:name) } 

    it 'should allow valid values for name' do 
    Sport::NAMES.each do |v| 
     should allow_value(v).for(:name) 
    end 
    end 

    it 'should not allow invalid values for name' do 
    %w(swimming Hockey).each do |v| 
     should_not allow_value(v).for(:name) 
    end 
    end 

    # Methods testing. 

end 

Несколько конкретных вопросов, которые у меня есть:

  1. Стоит ли испытывать, что ассоциация sport.leagues возвращает непустой стоимость?
  2. Как насчет теста, который гарантирует, что модель недействительна, если имя не указано?
  3. Как насчет теста, чтобы убедиться, что создана действительная запись и нет ошибок проверки?

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

Любые советы, которые вы испытали, могут предложить тестеры?

ответ

2
  1. Не, если вы только повторно проверяете поведение Rails.
  2. Да - это часть проверки модели и требования, почему бы не убедиться, что это требование выполнено?
  3. Тестирование ваших предположений относительно процесса сохранения является хорошей идеей, и если есть какие-либо слушатели/наблюдатели жизненного цикла, они могут не запускаться до сохранения.

Основные тесты Rails не помогут вам решить, что отличная идея для тестирования в приложении.

+0

+1 не проверяйте код, который у вас нет, с помощью модульных испытаний. – Gishu

0
  • Что вы должны проверить? Все, что вы не хотели бы сломать
  • Когда прекращать писать тесты? Когда страх превращается в скуку

Так что, если 1,2,3 дефекты, если указанное поведение не проявляется, то вы должны иметь тесты на всех 3.

Из фрагментов кода, лично я бы воздерживаться от проверки реализации БД (какие столбцы существуют и их детали). Причина. Я бы хотел изменить это со временем, не нарушая кучу тестов и не исправляя их. Тесты должны только ломаться, если поведение нарушено. Если путь (реализация), в котором вы их удовлетворяете, изменяется, тесты не должны прерываться/нуждаться в модификациях.
Фокус на том, что по сравнению с тем, как.

HTH