Ini sebagian besar masalah selera, dan sebagian besar alat pengujian layak mendapatkan dukungan garam keduanya. Preferensi pribadi saya adalah untuk RSpec daripada Test :: Unit karena a) output dan tata letak tes berfokus pada apa yang seharusnya dilakukan oleh objek yang diuji (berlawanan dengan apa kode itu) dan b) mengatakan 'X should Y' lebih masuk akal bagi saya daripada 'menegaskan bahwa X berpredikat Y'.
Untuk memberikan Anda beberapa konteks untuk poin-poin di atas, berikut adalah perbandingan (cukup dibuat-buat) dari output / kode sumber dari dua tes unit yang setara secara fungsional, satu ditulis menggunakan RSpec dan yang lainnya menggunakan Test :: Unit.
Kode sedang diuji
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
Tes :: Unit
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
Test :: Unit output (setinggi yang saya bisa lakukan)
Ξ 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.
Keluaran RSpec (formatter dokumentasi)
Ξ 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 Saya pikir Berin (responden sebelumnya) menyatukan peran Mentimun (yang tumbuh dari proyek RSpec tetapi independen) dan RSpec. Mentimun adalah alat untuk pengujian penerimaan otomatis dalam gaya BDD, sedangkan RSpec adalah pustaka kode untuk pengujian yang dapat, dan, digunakan pada tingkat unit, integrasi dan fungsional. Karenanya menggunakan RSpec tidak menghalangi pengujian unit - hanya saja Anda menyebut tes unit Anda sebagai 'spesifikasi'.