rspec-core는 실행 가능한 테스트코드를 만들기 위한 구조와 rspec 명령들을 제공한다.
환경
내 리눅스 환경에서 테스트 했다.
Ubuntn 리눅스 12.04
Ruby 1.8.7
gem 1.8.24
rspec 2.11.1
설치
# gem install rspec # rspec-core, rspec-expenctations, rspec-mocks 설치
# gem install rspec-core # rspec-core만 설치
기본 구조
RSpec는 테스트를 정의하기 위해서 "describe"와 "it"을 사용한다. 다른 테스트 이름만 명시할 수 있는 다른 테스트 툴과 달리 "설명"을 이용해서 직관적인 테스트 케이스를 만들 수 있다는 장점이 있다. 예컨데 아래와 같다.
"Describe an order."
"It sums the prices of its line items."
이것을 rspec 코드로 표현하면 다음과 같다.
describe Order do
it "sums the prices of its line items" do
order = Order.new
order.add_entry(LineItem.new(:item => Item.new(
:price => Money.new(1.11, :USD)
)))
order.add_entry(LineItem.new(:item => Item.new(
:price => Money.new(2.22, :USD),
:quantity => 2
)))
order.total.should eq(Money.new(5.55, :USD))
end
end
describe 메서드는 테스트 그룹을 정의한다. 이 블럭에 다양한 테스트 케이스를 작성한다.
nested groups
또한 그룹안에 중첩된 그룹을 만들 수 있다. describe로 큰 범주에서의 테스트를 정의하고 nested group로 작은 범주의 테스트 그룹을 정의할 수 있다. 예컨데, 성공 테스트 케이스 그룹, 실패 테스트 케이스 그룹으로 묶어서 관리할 수 있다. nested group은 "context"로 만들 수 있다.
describe Order do
context "with no items" do
it "behaves one way" do
# ...
end
end
context "with one item" do
it "behaves another way" do
# ...
end
end
end
aliases
shared examples
shared_examples를 이용해서 공유 테스트 그룹을 선언할 수 있다. 공유 테스트 그룹은 다른 테스트 그룹에서 include해서 사용할 수 있다.
shared_examples "collections" do |collection_class|
it "is empty when first created" do
collection_class.new.should be_empty
end
end
describe Array do
include_examples "collections", Array
end
describe Hash do
include_examples "collections", Hash
end
metadata
rspec 명령
rspec-core를 설치하면, 실행가능한 rspec 명령도 함께 설치된다. rspec --help 로 옵션을 살펴볼 수 있다.
autotest integration
rcov integration
간단 예제
간단한 예제를 만들어 보자. 계산기 클래스를 만들려고 한다. TDD는 코드를 만들기 전에 테스트를 만든다. 따라서 테스트를 위한 rspec 파일을 먼저 만든다.
# in spec/calculator_spec.rb
describe Calculator do
it "add(x,y) returns the sum of its arguments" do
Calculator.new.add(1, 2).should eq(3)
end
end
테스트를 만들었다면, 코드를 만든다.
# in lib/calculator.rb
class Calculator
def add(a,b)
a + b
end
end
rspec 명령을 이용해서 테스트를 진행한다. 테스트 결과는 html 형식으로 레포팅했다.
$ rspec spec/calculator_spec.rb --format doc
Calculator add
returns the sum of its arguments
Finished in 0.000379 seconds
1 example, 0 failures
rspec-core
환경
설치
기본 구조
nested groups
aliases
shared examples
metadata
rspec 명령
autotest integration
rcov integration
간단 예제
Recent Posts
Archive Posts
Tags