UnitTest.XUL(略して「UxU(うず)」)は、Firefox・Thunderbird用のアドオン、およびXULRunnerアプリケーション開発のためのxUnitテスティングフレームワークです。後退バグによる手戻りを防ぎ、アドオン開発の着実な進行を支援します。
UxUを利用して自動テストを開発すると、アドオンやライブラリの挙動を詳細な部分まで確実に検証できます。
- アドオンの機能について、様々な構造のWebページで安定した動作を保証したい。
- アドオンについて、他のアドオンと同時に使用した時の安定した動作を保証したい。
- ライブラリについて、様々なパターンの入力に対する安定した出力を保証したい。
- 後から行った変更によって既存の機能に悪影響が出ていないことを保証したい。
このようなアドオン開発上のニーズに、UxUはお応えします。
テストは、単に実行するだけでなく、その実行結果を見てデバッグを行うことが重要です。UxUはテストの実行結果の表示を工夫することで、デバッグ作業の効率を高めます。
- 例外発生時のスタックトレースから、外部エディタを直接起動できます。
- 成功したテストには、余計な情報を表示しません。重要でないメッセージの中にエラーの情報が埋もれてしまう心配は不要です。
- アサーション失敗時は、期待値と実測値を並べて表示します。また、期待値と実測値の差分も表示します。これにより、テストの失敗原因の特定を容易にします。
ソケット通信により、UxUをコンソールから操作することもできます。標準添付のユーティリティ「ifx」を利用すれば、JavaScriptを用いた対話的な操作も可能です。
UxUはGM関数のエミュレーション機能も含んでいます。GM関数を多用したGreasemonkeyスクリプトも、UxUは自動テストの対象にできます。
ソフトウェア開発においては、後々のメンテナンスのしやすさが重要です。テスト対象のプログラムに新機能を加えれば、それに対応した修正をテストにも施す必要があります。テスト対象だけでなくテストそのもののメンテナンスも容易に行えるよう、UxUは様々な特長を備えています。
UxUはテストファイル内に書かれた関数を自動的に収集し、関数の名前に基づいて、それらをテスト用のコードとして認識します。テストスイート全体、テストケース全体、個々のテストのそれぞれのレベルの前処理と後処理なども、関数として簡単に記述できます。
function setUp()
{
item = new MyClass();
}
function testMethod()
{
assert.equals(item.someMethod(), 'correct result');
}
ページの読み込みや、タイマーで動作する処理など、非同期に動作する処理の終了を待つ必要がある場合などに、コールバック関数やイベントリスナ等を使う必要はありません。
UxUでは任意のタイミングで、復帰条件を指定した上で、テストの処理を容易に一時停止できます。これにより、クラスのユニットテストだけでなく、GUIが関係する機能の結合テストなども非常に簡単に記述できます。
function testSend()
{
var box = content.document.getElementById('box');
action.fireMouseEventOnElement(box);
yield 500; // 500ミリ秒待って再開
assert.equals('50px', button.style.marginLeft);
}
UxUはMozillaアプリケーションのアドオン開発に利用されることを想定しています。一般的なJavaScriptフレームワークには無い、アドオン開発で直面しがちな様々な場合に応じたヘルパーメソッドを活用することで、テストしたい機能に直接関係するコードの記述だけに集中できます。
- Firefoxのタブ操作
- Thunderbirdのメール作成・送信操作
- 設定の読み書き
- ファイルの入出力
- ユーザ操作のエミュレーション
- etc.
UxUは目的別に様々なアサーションを多数備えています。それらを適切に使い分けることで、後から別の人がコードを見た時にも意味や意図を読み取りやすい、メンテナンス性の高いテストケースを作成できます。
- DOM Range同士の比較
- JSON形式のオブジェクト同士の比較
- 例外の捕捉
- 処理に要した時間の計測
- etc.
ユーザ設定や利用状況などに応じたテストを簡単に行えるように、UxUでは、それぞれのテストに専用のユーザプロファイルを指定することができます。
雛形としてのプロファイルを用意することで、同じ環境・同じ設定でテストを実行できます。テスト実行の度に環境を準備したり、テスト実行後に環境を元に戻したりといった、煩雑な操作は一切不要です。
一般的なWebアプリケーションでは利用することが難しい、JavaScript 1.8の便利な機能をすべて利用できます。これにより、テストの記述をより簡潔に保つことができます。
- Arrayの拡張メソッド
- E4X(ECMAScript for XML)
- letによるブロックスコープ
- 配列様の値の分割代入
- ジェネレータ関数の利用
- 式クロージャ
- etc.
いくつかのアドオンの開発現場で、実際にUxUが利用されています。
ソーシャルブックマークサービス「はてなブックマーク」の使いやすさを向上するFirefox用のアドオンです。内蔵のJavaScript製ライブラリのテストに、UxUが利用されています。
XUL/Migemoは、Firefoxのページ内検索機能やスマートロケーションバーの検索において、ローマ字入力によって直接日本語の単語を検索できるようにするアドオンです。様々な検索モード、様々な入力パターン、様々な操作パターンにおける挙動の検証のために、UxUが利用されています。
テキストリンクは、Webページに書かれたURI文字列をダブルクリックするだけで読み込めるようにする、Firefox用のアドオンです。様々な場面での挙動の検証のために、UxUが利用されています。
- UxUは、GNU General Public License 2によってライセンスされたフリーソフトウェアです。GNU General Public License 2またはそれ以降のバージョンが定める条項に従って、自由に利用することができます。
- UxUは、hyperstructによって開発されたMozLabに基づいて開発されています。
- 株式会社クリアコードはUxUの頒布にあたり、市場性及び特定目的適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細についてはGNU General Public License 2をお読みください。
クリアコードではUxUの有償サポート、UxUを利用してのテスト開発、導入支援、テスト開発の教育を行っています。詳細についてはinfo@clear-code.comまでお問い合わせください。
UxUのプロジェクトページは本サイト内にあります。利用方法、リファレンスマニュアルなどについてはプロジェクトページをご覧下さい。