IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Inst. Tech View

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第30回 RSpecによるテスト 2013年10月

 今回のInst.Tech Viewは、RSpecによるテストについての話題です。

 以前のInst.Tech Viewで《ソフトウェアテスト》についての話題を紹介しました。
 ここでは《テスト駆動開発(Test Driven Development:TDD)》や《振舞駆動開発(Behaviour Driven Development:BDD)》といったテストを前提としたソフトウェア開発手法に関する内容を紹介させていただきました。

 今回は、この中でも振舞駆動開発(BDD)をRuby言語で実践するためのツールである《RSpec》について、実際のテストコードとともに紹介します。

 RSpecは、前述の通り振舞駆動開発(BDD)を実現するためのツールで、プログラムの振舞い(期待する動作)を自然言語に近い形で記述するための機能を提供します。

 RSpecは一般的に以下のような書式に従います。

|describe (テストの対象) do
|  context (テストの状況) do
|    it (テストの説明) do
|      テストの内容
|    end
|  end
|end

《テストの対象》には実際のプログラムで使用するクラスやメソッドを指定します。
《テストの状況》にはテストの状況を文字列で記述します。引数を指定する場合や省略した場合などでテストを分けたい場合に使用します。
《テストの説明》には実際のプログラムで期待する動作を文字列で記述します。
《テストの内容》にはテストコードを記述します。

 RSpecの記述例として、以前紹介したRSpecのソースコードを再掲します。

|describe Stack do
|  context "when new" do
|    it "is empty" do
|      stack = Stack.new
|      stack.should be_empty
|    end
|  end
|end

 このテストコードは、Stackクラスのインスタンスを生成した時に空であることを期待するテストです。RSpecは《itメソッド》や《shouldメソッド》等を用いてなるべく自然言語に近い形で記述できるようになっているのがポイントです。

 《contextメソッド》、《itメソッド》などの引数に指定する文字列は日本語でも問題ありません。日本語で表すと以下のようになります。

|describe Stack do
|  context "新しく生成した場合" do
|    it "スタックが空であること" do
|      stack = Stack.new
|      stack.should be_empty
|    end
|  end
|end

 上記のコードを文章にすると「Stackオブジェクトを新しく生成した場合にスタックが空であること(を期待する)」という意味になり日本語でも意味が伝わります。

 RSpecのバージョンが2.11以降の場合は、テスト対象のオブジェクトを指定するshouldメソッドが非推奨となり、以下の記述が推奨されておりますのでご注意ください。

|describe Stack do
|  context "when new" do
|    it "is empty" do
|      stack = Stack.new
|      expect(stack).to be_empty
|    end
|  end
|end

 2.11以降ではshouldメソッドの代わりに「expect(対象オブジェクト).to」を用いてテスト対象のオブジェクトを指定します。

 弊社では現在、RailsアプリケーションのテストにRSpecを用いるための一日コースを提供させていただいております。Rails標準のテストツールしか使用したことのない方や、RSpecに興味をお持ちの方のご受講を心よりお待ちしております。

■■■ RSpec関連コースの詳細情報 ■■■  ※価格はメルマガ配信時点の価格です。

R019:RSpecによるRailsアプリケーションテスト
期間:1日間
価格:\52,500(税込)

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes