我刚刚开始学习BDD / TDD的实践(世界很高兴,我知道)。在这一点上我挣扎的事情之一是哪些测试实际上值得写。让我们为一个名为Sport的模型开始进行这些测试:
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
我有几个具体问题:
我可以继续。理想情况下,我可以遵循一些严格而快速的规则来指导我的测试工作。但我猜这有经验和良好的实用主义。我已经考虑过阅读几个宝石的源代码,比如rails core,以便更好地理解什么是值得测试和什么不是。
您有经验的测试人员可以提供哪些建议?
答案 0 :(得分:2)
Rails核心测试不会帮助您确定在应用程序中测试的好主意。
答案 1 :(得分:0)
因此,如果未显示指定的行为,1,2,3是缺陷,那么您应该对所有3进行测试。
从代码片段开始,我个人不会检查数据库实现(存在哪些列及其详细信息)。原因:我希望能够随着时间的推移改变它,而不必打破一堆测试并修复所有测试。只有在行为被破坏时,测试才会中断。如果您满足它们的方式(实现)发生变化,则测试不应该破坏/需要修改 专注于什么超过如何。
HTH