Đây chủ yếu là vấn đề về hương vị, và hầu hết các công cụ kiểm tra đều có giá trị muối hỗ trợ cả hai. Sở thích cá nhân của tôi là dành cho RSpec so với Test :: Đơn vị vì a) đầu ra và bố cục của các thử nghiệm tập trung vào những gì đối tượng được thử nghiệm phải làm (trái ngược với mã là gì) và b) nói 'X nên Y' có ý nghĩa với tôi hơn là 'khẳng định rằng X vị ngữ Y'.
Để cung cấp cho bạn một số bối cảnh cho các điểm ở trên, đây là một so sánh (khá giả) về mã đầu ra / mã nguồn của hai bài kiểm tra đơn vị tương đương về chức năng, một bài viết sử dụng RSpec và bài kiểm tra khác sử dụng Test :: Unit.
Mã đang thử
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
Kiểm tra :: Đơn vị
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
Kiểm tra :: Đầu ra đơn vị (đầy đủ như tôi có thể làm cho nó)
Ξ 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.
Đầu ra RSpec (định dạng tài liệu)
Ξ 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
Tái bút: Tôi nghĩ Berin (người trả lời trước) đang hợp nhất vai trò của Cucumber (phát triển từ dự án RSpec nhưng độc lập) và RSpec. Cucumber là một công cụ để kiểm tra chấp nhận tự động theo kiểu BDD, trong khi RSpec là một thư viện mã để kiểm tra có thể, và được sử dụng ở cấp độ đơn vị, tích hợp và chức năng. Do đó, sử dụng RSpec không loại trừ thử nghiệm đơn vị - chỉ là bạn gọi thử nghiệm đơn vị của mình là 'thông số kỹ thuật'.