Trema は 3種類のテストフレームワークを使って網羅的にテストされています。今回はこのテストの概要を説明します。
Trema 自体のテスト
Trema の配布物には Trema 自体のテストコード一式が付属しています。これは、アジャイル開発で特に重要なプラクティスであるソフトウェアテストを重視しているからです。Trema を使うとコンローラ開発をテストドリブンでできることはもちろん、Trema 自体も十分にテストされているのです。
Trema は内部的には C ライブラリと、それをラップした Ruby ライブラリから構成されています。配布物に含まれるテストはこの C と Ruby 両方のライブラリを様々なレベルでテストします。
C のユニットテスト
C ライブラリのテストは Google の cmockery というテスト用ライブラリで書かれています。これはいわゆるユニットテストで、C の関数レベルでの呼び出しと返り値などをテストしています。テストコードのディレクトリは unittests/ になります。
Ruby のユニットテスト
Ruby ライブラリのテストは RSpec という Ruby のユニットテストライブラリで書かれています。RSpec を使ったテストコードの一例はソフトウェアデザインの Trema 連載記事で読むことができます。ディレクトリは spec/ になります。
受け入れテスト
もうひとつ、trema コマンドなどのユーザインタフェースレベルでのテストがあります。たとえば「trema run controller.rb と打つとコントローラプロセスが上がる」というレベルのテストがこれに当たります。
こういうテストを一般に受け入れテストと呼びますが、Trema の受け入れテストは cucumber という Ruby のフレームワークで書かれています。ディレクトリは features/ になります。
まとめ
Trema のテストの仕組みを説明しました。cmockery, RSpec, cucumber 3 種類のテストフレームワークを使って C、Ruby ライブラリともに網羅的にテストされています。