【发布时间】:2017-06-23 08:42:07
【问题描述】:
这是我要测试的模型的架构:
create_table "retreats", force: :cascade do |t|
t.string "title"
t.string "tagline"
t.string "type_of"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "description"
t.string "schedule"
t.boolean "available", default: true
end
这是撤退模型:
class Retreat < ApplicationRecord
TYPES_OF_RETREATS = ['individual', 'group']
validates :title, presence: true
validates :type_of, presence: true, inclusion: {in: TYPES_OF_RETREATS,
message: "%{value} is not a valid type."}
has_many :testimonials, dependent: :destroy
has_many :images, dependent: :destroy
has_and_belongs_to_many :dates, class_name: "RetreatDate", foreign_key:
'retreat_id', association_foreign_key: 'retreat_date_id'
end
这些是我写的测试用例:
test "retreat should not save without a title" do
retreat = retreats(:no_title)
assert_not retreat.save, "Saved a retreat without a title"
end
test "retreat should not save without a type" do
retreat = retreats(:no_type)
assert_not retreat.save, "Saved a retreat without a type"
end
test "retreat can have a tagline, description, schedule and available" do
retreat = retreats(:all_attributes)
assert retreat.save, "Retreat failed to save"
end
test "retreat type should be from the provided list" do
retreat = retreats(:invalid_type)
assert_not retreat.save, "Some other retreat got saved. It shouldn't
have gotten saved."
end
test "retreat can have many testimonials" do
retreat = retreats(:one)
retreat.testimonials << Testimonial.new(statement: 'this is my
testimonial', participant_name: 'abc')
assert retreat.save, "Retreat did not save with the testimonials."
end
test "retreat can have many dates" do
retreat = retreats(:one)
retreat.dates.create({date: '02-08-2012'})
retreat.dates.create({date: '02-08-2013'})
assert retreat.save, "Retreat with multiple dates is not saving"
assert_equal(2, retreat.dates.length, "Retreat isn't saving multiple
dates.")
end
我正在寻找有关我应该为哪种测试用例编写测试的建议。我觉得我的一些测试用例是不必要的。像用于验证的测试用例是有意义的,但测试我是否可以添加多个推荐让我感到不舒服。
我可以像这样重写前两个测试用例:
test "retreat title and type_of must not be empty" do
retreat = Retreat.new
assert retreat.invalid?
assert retreat.errors[:title].any?, "Title must exist"
assert retreat.errors[:type_of].any?, "Type must exist"
end
编写单元测试的最佳实践是什么?以及如何编写更好的单元测试?
谢谢:)
【问题讨论】:
标签: ruby-on-rails unit-testing testing