มันเป็นเรื่องของรสนิยมเป็นส่วนใหญ่และเครื่องมือทดสอบส่วนใหญ่ที่ให้คุณค่ากับการสนับสนุนเกลือทั้งคู่ การตั้งค่าส่วนตัวของฉันสำหรับ RSpec over Test :: Unit เพราะก) เอาต์พุตและเลย์เอาต์ของการทดสอบเน้นไปที่สิ่งที่วัตถุภายใต้การทดสอบควรทำ (ตรงข้ามกับรหัสคืออะไร) และ b) การพูดว่า 'X ควร Y' ทำให้รู้สึกมากกว่าฉัน 'ยืนยันว่า X กริยา Y'
เพื่อให้บริบทบางอย่างสำหรับจุดต่าง ๆ ข้างต้นนี่เป็นการเปรียบเทียบ (เอาท์พุทที่ค่อนข้างดี) ของเอาท์พุท / ซอร์สโค้ดของการทดสอบหน่วยเทียบเท่าสองหน้าที่การทดสอบหนึ่งเขียนโดยใช้ RSpec และอื่น ๆ โดยใช้ Test :: Unit
รหัสภายใต้การทดสอบ
class DeadError < StandardError; end
class Dog
def bark
raise DeadError.new "Can't bark when dead" if @dead
"woof"
end
def die
@dead = true
end
end
Test :: หน่วย
require 'test/unit'
require 'dog'
class DogTest < Test::Unit::TestCase
def setup
@dog = Dog.new
end
def test_barks
assert_equal "woof", @dog.bark
end
def test_doesnt_bark_when_dead
@dog.die
assert_raises DeadError do
@dog.bark
end
end
end
RSpec
require 'rspec'
require 'dog'
describe Dog do
before(:all) do
@dog = Dog.new
end
context "when alive" do
it "barks" do
@dog.bark.should == "woof"
end
end
context "when dead" do
before do
@dog.die
end
it "raises an error when asked to bark" do
lambda { @dog.bark }.should raise_error(DeadError)
end
end
end
ทดสอบ :: หน่วยผลลัพธ์ (เต็มตามที่ฉันสามารถทำได้)
Ξ code/examples → ruby dog_test.rb --verbose
Loaded suite dog_test
Started
test_barks(DogTest): .
test_doesnt_bark_when_dead(DogTest): .
Finished in 0.004937 seconds.
เอาต์พุต RSpec (ตัวจัดรูปแบบเอกสาร)
Ξ code/examples → rspec -fd dog_spec.rb
Dog
when alive
barks
when dead
raises an error when asked to bark
Finished in 0.00224 seconds
2 examples, 0 failures
2 tests, 2 assertions, 0 failures, 0 errors
PS ฉันคิดว่า Berin (ผู้ตอบกลับก่อนหน้านี้) กำลังพูดถึงบทบาทของ Cucumber (ซึ่งงอกออกมาจากโครงการ RSpec แต่เป็นอิสระ) และ RSpec แตงกวาเป็นเครื่องมือสำหรับการทดสอบการยอมรับอัตโนมัติในรูปแบบ BDD ในขณะที่ RSpec เป็นไลบรารีรหัสสำหรับการทดสอบที่สามารถและเป็นที่ใช้ในหน่วยการรวมและระดับการทำงาน ดังนั้นการใช้ RSpec จึงไม่ จำกัด การทดสอบหน่วย - เพียงแค่คุณเรียกว่า 'รายละเอียด' การทดสอบหน่วยของคุณ