루비는 직접 unit test 툴을 제공하며, 다른 다양한 종류의 unit test 툴들과도 함께 사용할 수가 있다. 그래서 적응하는데 약간의 혼란을 겪고 있는 중이다. 이 중 RSpec를 이용해서 sinatra 애플리케이션의 unit test를 만드는 방법을 살펴보려 한다.
sinatra에서 유닛 테스트의 장점
일반적인 방법으로 sinatra 웹 애플리케이션을 테스트한다고 가정해보자. 아래의 준비과정을 거쳐야 할 것이다.
테스트 시나리오를 준비한다.
웹 서버를 실행한다.
sinatra 웹 애플리케이션 서버를 실행한다.
웹 client 프로그램(firefox, chrome, wget, curl 등등)을 이용해서 테스트를 한다.
이 방식은 테스트 준비단계가 복잡하고, 그만큼 많은 시간이 소모된다는 단점이 있다. 웹 서버와 애플리케이션 서버를 다시 시작하는 것에 많은 시간이 필요하기 때문이다. 그나마 경량 웹 프레임워크인 sinatra는 다른 것들에 비해서 준비시간이 짧기는 하지만, 테스트 하다보면 그 준비시간이 짜증나게 느껴진다.
유닛 테스트를 이용하면, 웹 서버와 sinatra의 준비과정 없이도 즉시 테스트를 진행할 수 있다. 또한 테스트 시나리오를 코드화 할 수 있기 때문에, 자동화된 테스트도 가능하다.
RSpec
먼저 rspec 파일을 만들어야 한다. 간단한 예제로 살펴보겠다.
require 'myapp' # 테스트할 sinatra 애플리케이션
require 'rack/test'
require 'json'
describe 'system information' do
include Rack::Test::Methods
def app # 테스트할 sinatra 애플리케이션을 정의한다.
MyApp # 내가 테스트할 애플리케이션 이름은 MyApp이다.
end
it ": system uptime" do
get '/system/uptime'
body = last_response.body
json = JSON.parse(body)
json['items']['uptime'].should be > 0
end
end
소개
sinatra에서 유닛 테스트의 장점
RSpec
히스토리
Recent Posts
Archive Posts
Tags