30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者向け】テスト駆動開発とRspecについて調べてみた

Last updated at Posted at 2016-11-13

##目次
・TDD(テスト駆動開発)とは
・TDDの主な目的
・Rspecとは
・Rspecの使い方

##TDD(テスト駆動開発)とは
■TDDとは以下の手順で開発を行っていく手法である
1.プロダクトコードを書く前にテストコードを書き、それが失敗することを確認する (レッド)
2.テストに成功するようにプロダクトコードを書く (グリーン)
3.プログラムの振る舞いを変えないように、プロダクトコードの重複などを整理する (リファクタリング)
(最初に戻る)

またTDDには以下の原則がある
・テストに失敗しない限り、プロダクトコードを書いてはいけない。
・プロダクトコードはテストを通るように書く。
・テストは少しずつ書き進めていく。

■TDDの主な目的
テストを最初に書くことで、自分が作るべきプログラムが明確化されるとともに、実行工数を15%から25%増加させる代わりに、欠陥密度を4割から9割低下させてデバッグや手戻り工数を減少させ、トータルの総工数を削減する事が出来る。
他にも以下のようなメリットがあると言われている。
・テストコードが必ず作成される。
・実装前に仕様を決めることでメンバーが仕様を明確に把握した状態で開発に取りかかれる。
・仕様齟齬に気づくタイミングが早い。

##Rspecとは
これまでのRailsのテスト駆動開発で使われてきたTest::Unitを代替するフレームワークである。

ソフトウェア設計とは次の2つからなるという考えをもとに、プロダクトコードを書く前に、プログラムの振る舞いを動作可能なサンプルとして書くことを既存のxUnitフレームワークに比べて全面に押し出したもの。
・テストコード: プログラムがどのように振る舞うべきかを定義したもの
・プロダクトコード: テストコードで定義された振る舞いを実装したもの

##Rspecの使い方

■インストール方法
以下のコマンドで簡単にインストール出来る。

gem install rspec

■実行方法
rspecコマンドの引数として振舞を定義したスペックファイルを与えるとRSpecを実行が可能。

rspec ***_spec.rb
..


Finished in 0.047857 seconds

2 examples, 0 failures

・-fdオプションをつけることでテスト毎の成否が確認できるようになる。

■Specファイルの記述の仕方
specファイルにはプログラムに期待する振る舞いを記述する。
it 〜 endのなかに一つのテストケースを書く

spec/models/class_spec.rb
describe "テスト対象" do
  it "期待するプログラムの振る舞い"
    # ...
  end

  context 条件 do
    it "contextの条件下で期待する振る舞い" do
      # ...
    end
  end
end

■テストケースを簡単に記述するためにRspecが用意してくれているもの
matcher : 期待値と実際の値を比較して、一致した(もしくは一致しなかった)という結果を返すオブジェクト
・eq(x):xと等しいか
・not_eq(x):xと等しくないか
・be [true/false]:trueかfalseか
・be < x:xより小さいか
・be_between(x, y).inclusive:数値がxとyの範囲内か(xとyも範囲に含む)
・respond_to(:{メソッド名}):そのメソッドが存在しているか

30
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?