2012-01-10 3 views
3

BDD/TDD (세계 기뻐함, 나는 알고있다)의 실습을 배우기 시작했다. 이 시점에서 제가 고심하는 것 중 하나는 테스트가 실제로 가치가있는 테스트입니다. 내가 가진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. 유효한 레코드가 만들어지고 유효성 검사 오류가 없는지 확인하는 테스트는 어떻습니까?

나는 계속할 수있다. 이상적으로, 나는 나의 테스트 노력을 인도하기 위해 따라야 할 몇 가지 단호하고 빠른 규칙이있을 것이다. 그러나 나는 이것이 경험과 좋은 ole '실용주의와 함께 오는 것을 짐작하고있다. 필자는 레일 코어와 같은 몇몇 보석의 소스 코드를 통해 테스트 할 가치가있는 것과 그렇지 않은 것을 더 잘 이해할 수있는 방법에 대해 생각해 보았습니다.

테스터에게 도움이 될 수있는 조언이 있습니까?

답변

2
  1. 레일스 동작 만 다시 테스트하는 경우가 아닙니다.
  2. 예 - 모델 검증 및 요구 사항의 일부이므로 요구 사항이 충족되는지 확인하십시오.
  3. 저장 프로세스에 대한 가정을 테스트하는 것이 좋습니다. 수명주기 청취자/관찰자가있는 경우 저장 전까지 해고되지 않을 수 있습니다.

레일 핵심 테스트는 응용 프로그램에서 테스트 할 좋은 아이디어를 결정하는 데 도움이되지 않습니다.

+0

+1 유닛 테스트를 통해 소유하고 있지 않은 코드는 테스트하지 마십시오. – Gishu

0
  • 테스트해야 할 사항은 무엇입니까? 너는 부서지기 싫은 모든 것
  • 필기 시험을 언제 중단하나요? 두려움이 지루함으로 변형되면 1,2,3 결함이있는 경우 지정된 동작이 전시되어 있지 않은 경우

그래서, 당신은 개인적으로 내가 좋겠 코드 조각에서 모두 3

에 검사를해야한다 DB 구현 (열이 있는지 여부 및 그 세부 사항)을 확인하지 마십시오. 이유 : 나는 많은 시험을 중단하지 않고 모든 것을 고칠 필요없이 시간이 지나면 그것을 바꿀 수 있기를 바랄 것이다. 테스트가 작동하지 않으면 테스트가 중단되어야합니다. 귀하가 만족하는 방식 (구현)이 변경되면 테스트가 수정을 필요로하지 않아야합니다.
어떻게 끝났는가에 초점을 맞 춥니 다.

HTH