TOP
>
システム開発
> テストの自動化
Ruby on Rails入門
第4回:Railsでテストをしてみよう
著者:
アスタリクス 大西 正太
2006/6/14
1
2
3
4
次のページ
テストの自動化
近年のシステム開発では図1に示すように自動化されたテストを取り込み、継続的インテグレーションを実現した開発スタイルが提唱されています。
図1:テストの自動化
テストの自動化を導入することで、ソフトウェア開発で最も恐れるべき事象の1つであるデグレードを回避することができるため、積極的にコードを整理(リファクタリング)することができるようにもなります。
またテストの自動化は、先進的なアジャイル開発ではもちろんのこと、従来のウォーターフォール型開発プロセスにも有効的な適用が可能であるため、近年急速に一般化しつつあります。そしてRuby on Rails(以下、Rails)にはテストの自動化を実践するためのサポートが含まれています。
Railsのテストサポート
それではRailsではどのようにテストの自動化がサポートされているのでしょうか。
Railsのテスティングフレームワークの構成
RailsではRubyに標準で付属するテスティングフレームワークである「Test::Unit」が拡張されて提供されます。「Test::Unit」はJUnitに代表されるxUnitを意識したつくりになっており、それらを利用したことがある方にはとっつきやすくできています。
テストに関するファイルはtestフォルダにまとまっています(図2)。
図2:フォルダ構成
unit
モデルのテストを配置するフォルダ
functional
コントローラのテストを配置するフォルダ
integration
コントローラをまたがるテストを配置するフォルダ
fixtures
fixturesを配置するフォルダ。fixturesとは初期データのこと。すべてのテスト実行前にDBはfixturesで指定された状態に初期化される。自動化されたテストを繰り返し実行するためには事前状態を一定にする必要があるため、必須の機能
mocks
Webサービスへの接続など、開発中には利用ができない箇所を代替するモックオブジェクトを配置するフォルダ。Railsでは元来Rubyが持つダイナミックな性質により実現
表1:各フォルダの用途
テストのプログラムが書きやすいようにはじめからモデルとコントローラのテストを分けて考えていたり、DB(データベース)の初期化やモックの機能が搭載されている点からも徹底したテストの自動化を前提に構成されていることがわかると思います。
環境モードとテスト
前回までは意識することなく進めてきましたが、Railsには「環境モード」という考え方があります。環境モードには表2にあげた3つのモードがあらかじめ準備されています。
モード名
概要
production
本番用のモード。Railsが持つ本来の性能を発揮する
development
開発用のモード。ソースコードへ加えた変更が即時に反映されるが、速度低下の代償を伴う
test
テスト用のモード。テストはこのモードで実行される
表2:環境モード一覧
環境モードはサーバ起動時に指定することができます。各モードでは想定された状況に挙動が最適化されているほか、モード別にDBを定義できるため各々のデータを干渉させずに開発を進めることが可能です。
テスト時のモードであるtestモードのDBには、テスト実行前にdevelopmentモードのDBからスキーマ情報を簡単にインポートできます。この機構によって開発中にdevelopmentモードのデータを汚すことなく、またスキーマの同期が取れた状態で思う存分テストを実施することができます。
rakeを用いた継続的インテグレーション
RailsのテストはRadRailsなどのIDE(統合開発環境)から実行するほかにも、Rubyのバッチ的な位置づけである「rake」経由でも実施開始することができます。
rakeでは定義次第でSubversionやCVSなどのバージョン管理システムからソースコードをチェックアウトしてくることも可能ですので、cronやatなどのタスクスケジューラで定期的にrakeを流すようにすれば、継続的インテグレーションのベースを構築することができます。
1
2
3
4
次のページ
著者プロフィール
株式会社アスタリクス 大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(
http://rubricks.org/
)のコミッタ。
INDEX
第4回:Railsでテストをしてみよう
テストの自動化
サンプルにテストを適用する
モデルのテストを作成
コントローラのテスト