UxU - UnitTest.XUL
UnitTest.XUL(略して「UxU(うず)」)は、Firefox・Thunderbird用のアドオン、およびXULRunnerアプリケーションの開発を支援するxUnitテスティングフレームワークです。
- UxU用のテストケースの書き方(別ページ)
- UxUによるGreasemonkeyスクリプトのテスト(別ページ)
- テストケース内で利用可能なヘルパーメソッド(別ページ)
- UxUをリモート操作する(別ページ)
- UxUのコマンドラインオプション(別ページ)
ダウンロード
- Mozilla Add-onsサイトからダウンロード
- Subversionリポジトリ: Trunk, Branches, Tags
すべてのバージョン
- UxU 0.7.6 (2010.1.29)
- 全般
- イテレータジェネレータを使わなくとも、
utils.wait()で処理待ちを行えるようにした(Gecko 1.9以降限定) utils.platformVersionでGeckoのバージョンを取得できるようにした- URIのマッピングに使用する変数名を
redirectからmappingに変更 - タブの内容の読み込み完了を正しく検知できない事がある問題について改善
- テストの件数が多い時に、最後の方に行くにつれて処理が遅くなる問題について改善
- クリック位置や取得する要素の位置を画面上の座標のみで指定する場合、ウィンドウの重なり順を取得できない環境では、最前面のウィンドウの代わりに最も若いウィンドウに対して処理を行うようにした
utils.tearDownHttpserver()でポート番号を指定するとエラーになっていたのを修正- URIのマッピング機能が有効な時、プロキシを使用していると通信が一切できなくなる問題を修正
- 64bit版Ubuntu等、nsUpdateService.jsが存在しない環境で機能しなくなる問題について暫定的に対処
- イテレータジェネレータを使わなくとも、
- UxU 0.7.5 (2009.10.30)
- 全般
- クリック等のイベントをエミュレートするためのAPIを刷新し、以下のメソッドを追加した:
action.clickOn()/action.leftClickOn()action.middleClickOn()action.rightClickOn()action.doubleClickOn()/action.leftDblclickOn()action.middleDblclickOn()action.rightDblclickOn()action.mousedownOn()/action.leftMousedownOn()action.middleMousedownOn()action.rightMousedownOn()action.mouseupOn()/action.leftMouseupOn()action.middleMouseupOn()action.rightMouseupOn()action.clickAt()/action.leftClickAt()action.middleClickAt()action.rightClickAt()action.doubleClickAt()/action.leftDblclickAt()action.middleDblclickAt()action.rightDblclickAt()action.mousedownAt()/action.leftMousedownAt()action.middleMousedownAt()action.rightMousedownAt()action.mouseupAt()/action.leftMouseupAt()action.middleMouseupAt()action.rightMouseupAt()action.keypressOn()action.keydownOn()action.keyupOn()action.inputTo()action.appendTo()action.pasteTo()action.additionallyPasteTo()
- クリック等のイベントをエミュレートするためのAPIを刷新し、以下のメソッドを追加した:
- UxU 0.7.4 (2009.10.29)
- 全般
utils.inspect()の第2引数でインデント幅を指定できるようにした- TSVの読み込みのためのヘルパーメソッドを追加(
utils.parseTSV(),utils.readTSV(),utils.readParametersFromTSV(),utils.readParameterFromTSV(),utils.readParamsFromTSV(),utils.readParamFromTSV())
- テストランナー
- データ駆動テストの結果に対して、テストに渡されたパラメータの内容を表示するようにした
- UxU 0.7.3 (2009.10.29)
- 全般
- テストケースの実行用プロファイルの指定が間違っていた場合など、テスト実行前の段階で内部エラーを引き起こす深刻な問題があった場合に、エラーの内容をテスト結果に出力するようにした
- スタックトレースからUxU内部のスクリプトを除外する設定の時、除外後のスタックトレースが空である場合のためのフォールバックが働いていなかったのを修正
utils.cosmeticClone()で、複製しようとしているフォルダの中に不可視のファイルがあるとエラーになってしまっていたのを修正
- UxU 0.7.2 (2009.10.23)
- 全般
utils.productVersion追加utils.compareVersions()で、演算子を指定する形の呼び出しに対応utils.parseTemplate()をutils.processTemplate()へ名称変更(後方互換のため、旧来の名前でも利用可能)utils.createDatabaseFromSQLFile()の第3引数でutils.processTemplate()用のスコープを指定できるようにしたutils.include()について、第2引数でエンコーディングを、第3引数で実行時の変数スコープを指定できるようにした(後方互換のため、旧来の記法でも利用可能)
- UxU 0.7.1 (2009.10.20)
- 全般
- 関数のネストの深さが一定数を超えるまでは、従来通りの高速な動作を行うようにした
utils.cosmeticClone()で、第3引数を省略した場合は元のファイルと同じ名前でファイルを複製するようにした
- UxU 0.7.0 (2009.10.16)
- 全般
- データ駆動型テストの記述に対応
- テストの個数が90前後を超えると正常に動作しなくなっていたのを修正
- Linuxで、UxUによって作成されたディレクトリのアクセス権がおかしくなることがあったのを修正
- Firefox 3.6a1pre以降でHTMLのデフォルトの名前空間がXHTMLの物になった仕様変更に追従
- Windowsのレジストリを読み書きするヘルパーメソッドを追加(
utils.getWindowsRegistry(),utils.setWindowsRegistry(),utils.clearWindowsRegistry()) utils.makeFileWithPath()の別名としてutils.getFileFromPath()を追加- CSVの読み込みのためのヘルパーメソッドを追加(
utils.parseCSV(),utils.readCSV(),utils.readParametersFromCSV(),utils.readParameterFromCSV(),utils.readParamsFromCSV(),utils.readParamFromCSV()) - JSON読み込みのためのヘルパーメソッドを追加(
utils.readJSON()) - 新しいアサーションを追加:
assert.implementsInterface() - いくつかのエラーメッセージをローカライズした
- XULRunnerアプリケーションすべてに対してインストールできるようにした
assert.raises()で、未知の例外が発生した時はエラーではなくテスト失敗と見なすようにしたassert.raises(),assert.notRaises()での検証時に、例外として渡されたオブジェクトのmessageプロパティを用いても比較するようにした
- テストランナー
- 前回のテスト実行結果が長い場合に、テストランナー起動時の初期化処理でフリーズしてしまう問題を解消
- 何もせずにテストランナーを終了すると、前回のテスト結果が消えてしまう問題を修正
- UxU 0.6.1 (2009.6.8)
- 全般
action.fireKeyEventOnElement()で、イベントの種類が指定されていない時に発行されたkeypressイベントについて、keyCodeがキー番号、charCodeが0になってしまっていたのを修正(0.6.0でのregression)
- UxU 0.6.0 (2009.6.8)
- 全般
- ローカルHTTPサーバを利用できるようにした(
utils.setUpHttpServer()、utils.tearDownHttpServer()、utils.tearDownAllHttpServers()の追加) - テストの実行中に限り、特定のルールにマッチするURIにアクセスした際に、別のリソースの内容を返す機能を追加
- テスト内でのアサーションの個数を検証する機能について、プロパティ名での指定において
assertionsCount,、minAssertionsCount、maxAssertionsCountも利用できるようにした utils.loadURI()、utils.loadURIInTestFrame()、utils.addTab()でリファラを指定できるようにしたGM_registerMenuCommand()を実装GM_log()の処理結果を後で取得できるようにしたaction.fireMouseEvent()、action.fireMouseEventOnElement()でdblclickイベントを送出する処理が期待通りに動作していなかったのを修正action.fireKeyEventOnElement()でkeypressイベントを送出する際に、keydown/keyupイベントにおいて押されたキーの情報が失われていたのを修正(なるべくネイティブの動作に近くした)action.inputTextToField()でinputイベントが発行されていなかったのを修正action.fireXULCommandEvent()、action.fireXULCommandEventOnElement()の実装を改善- 画面上の位置からフレームを取得する時、Content-Typeがtext/htmlなページでフレームを取得できない場合があったのを修正
- テスト用の別プロファイルを使用する際に、現在のUxUの設定を引き継ぐようにした
- グローバルな場所からユーザプロファイルにインストール先を戻せるようにした
- 管理者権限が必要な機能は、管理者権限がある場合にのみ利用できるようにした
- ローカルHTTPサーバを利用できるようにした(
- テストランナー
- ツールバー上にThrobberを追加
- テスト用フレームを常に一定の大きさ以上で表示するようにした
- テストの実行前に発生したエラーが最後の1つしか表示されていなかったのを、すべて表示するようにした
- UxU 0.5.12 (2009.5.22)
- UI
- Thunderbirdでメニューからテストランナー等を起動できなくなっていたのを修正
- 全般
utils.parseTemplate()追加- 文字列からハッシュ値を得る
utils.computeHash()、utils.md2()、utils.md5()、utils.sha1()、utils.sha256()、utils.sha384()、utils.sha512()を追加 - ファイルの内容からハッシュ値を得る
utils.computeHashFromFile()、utils.md2FromFile()、utils.md5FromFile()、utils.sha1FromFile()、utils.sha256FromFile()、utils.sha384FromFile()、utils.sha512FromFile()を追加
- UxU 0.5.11 (2009.5.18)
- 全般
- テンポラリファイルを削除できなかった時にテストが途中で止まってしまう問題に対処
assert.contained()、assert.notContained()追加utils.openDatabase()、utils.createDatabase()、utils.createDatabaseFromSQL()、utils.createDatabaseFromSQLFile()追加
- UxU 0.5.10 (2009.4.20)
- 全般
- 個々のテスト関数の
targetProductプロパティによって、テストの実行をスキップするかどうかを判別できるようにした - テスト関数の
shouldSkipプロパティ、テストケースのshouldSkipグローバル変数によって、テストの実行をスキップできるようにした assert.assertionsCountEquals()、assert.assertionsMinCount()、assert.assertionsMaxCount()追加utils.productについて、Sunbird、Mozilla Application Suite、SeaMonkey、Fennecの場合にも名前を取得できるようにした- Firefox、Thunderbird、Sunbird、Mozilla Application Suite、SeaMonkey、Fennecの各アプリケーションについて、実行ファイルのパスを明示的に設定できるようにした
- 個々のテスト関数の
- UxU 0.5.8 (2009.4.16)
- 全般
- テスト関数の
assertions、minAssertions、maxAssertionsプロパティで、実際に処理されたアサーションの数を検証できるようにした - テスト内でアサーションが1回も行われなかった時は警告を表示するようにした
- テスト関数の
- UxU 0.5.7 (2009.4.15)
- 全般
action.fireMouseEvent()で、指定された座標の位置に要素を見つけられなかった時にエラーメッセージが正しく出力されていなかったのを修正
- テストランナー
- 期待値と実測値の差分をカラー表示するようにした
- UxU 0.5.6 (2009.4.13)
- 全般
assert.inDelta()で、境界値と等しい値が得られた場合もアサーション成功と見なすように仕様を変更utils.log()でテストランナー上やログにメッセージを出力できるようにした- 優先度を無視してテストを実行する場合に、テストケース側で全体の実行優先度を
neverに設定されているテストが実行されてしまっていたのを修正 - プロファイルを指定してテストを実行する場合において、テストの実行完了を検知できない場合があったのを修正
- Firefox 2でマウス系のイベントが送出されない問題を修正
- 座標からのフレームの取得に失敗する場合があったのを修正
- 異なるウィンドウでインスタンスが作られたArrayやDateの比較に失敗する問題を修正
greasemonkey.open()が機能しなくなっていたのを修正- 存在しないファイルを指定された時に
utils.cosmeticClone()がエラーになる問題を修正 yieldによる処理待ちを含むテストで、一つ目のyieldよりも前で例外が発生した時に二重にエラーが報告されていたのを修正- テストケース内で指定された実行対象プロダクトがインストールされていない場合、テストの実行をスキップするようにした
utils.setUpTestWindow()、utils.openTestWindow()で、オプションでウィンドウの位置や大きさを指定できるようにした
- テストランナー
- 名称を「MozUnitテストランナー」から「UxUテストランナー」に変更
- テストケース以外のファイルがドロップされた時、ブラウザウィンドウがある場合はブラウザへのドロップと見なすようにした
- UxU 0.5.5 (2009.3.3)
- 全般
- ヘルパーメソッド追加:
- $()
- $X()
- utils.getSelectionClipBoard()
- utils.sleep()(※Gecko 1.9以降)
- ヘルパーメソッド追加:
- Thunderbirdのメール作成ウィンドウ用ヘルパーメソッド追加:
- mail.compose.setUp()
- mail.compose.tearDown() / mail.compose.tearDownAll()
- mail.compose.window / mail.compose.windows
- mail.compose.addressFields / mail.compose.firstAddressField / mail.compose.lastAddressField
- mail.compose.blankAddressFields / mail.compose.firstBlankAddressField / mail.compose.lastBlankAddressField
- mail.compose.addressTypes / mail.compose.firstAddressType / mail.compose.lastAddressType
- mail.compose.getAddressTypeForField()
- mail.compose.dummyRows / mail.compose.firstDummyRow
- mail.compose.recipients / mail.compose.setRecipients()
- mail.compose.appendRecipients()
- mail.compose.subject
- mail.compose.body / mail.compose.setBodyContents()
- mail.compose.appendBodyContents()
- mail.compose.attachments
- mail.compose.attachFile()
- mail.compose.send() / mail.compose.sendByButtonClick()(※Gecko 1.9以降)
- Thunderbirdではcontent, gBrowser, contentWindowでテスト用フレームに対応する内容を返すようにした
- テストケース固有のsetUpとtearDownに対応
- MozLab(MozUnit)用に書かれたテストケースが動作しない場合があったのを修正
- DOMWindowをutils.inspect()に渡すとエラーになる問題を修正
- プロファイルを指定してテストを実行する場合において、テストの実行に時間がかかるとタイムアウトしてしまう問題を改善
- Thunderbird 2でファイルをドラッグ&ドロップでテストケースを読み込ませることができない問題を修正
- 全般
utils.loadPrefs()の挙動がMozilla本体の設定読み込みAPIの挙動と異なっていたのを修正
- 全般
- utils.setClipBoard()、utils.getClipBoard()、utils.loadPrefs()を追加
- action.fireMouseEvent()でダブルクリックのイベントが正しく発行されない問題を修正
- assert.contains()、assert.notContains()で、比較対象の値としてDOMRange、nsISelection、またはDOMNodeを受け付けるようにした
- utils.loadURI()、utils.addTab()でサブフレームの内容読み込みがすべて終わるまで待つようにした
- テストケース内で定義するsetUp、tearDown、warmUp、warmDown(coolDown)の各関数について、名前をsetup、teardown、warmup、warmdown(cooldown)と定義した場合でも認識するようにした。
- MozUnitテストランナー
- Linuxでウィンドウが常に最前面に表示されてしまう問題を修正
- 全般
- GM_getResourceURL()、GM_getResourceText()対応
- action.fireMouseEventOnElement()について、部分的に画面外にはみ出している要素の場合は表示されている部分の中央をクリックしたものと見なすようにした
- inspect()で表示するプロパティ一覧を名前順でソートするようにした
- フォルダ内の複数テストを一括実行する場合に、ユニットテストと機能テストが両方ある場合はユニットテストから実行するようにした
- Firefox以外でテスト用フレームへアクセスできない問題を修正
- 循環参照があるオブジェクトをassert.equals()などで比較しようとするとエラーになる問題を修正
- アクセスするだけでエラーになるプロパティ(例:nsIFile::targetなど)があるオブジェクトをinspect()しようとするとエラーになる問題を修正
- MozUnitテストランナー
- 実行中の各テストの名前を表示するようにした
- エディタに渡す引数のプレースホルダ(%f, %u, %l, %c)の大文字小文字を区別しないようにした
- スタックトレースから行番号を指定してファイルを開けるようにした
- 全般
- assert.finishesWithin(assert.finishWithin), assert.compare追加
- assert.raises, assert.notRaises, assert.finishesWithinでジェネレータ・イテレータへを利用できるようにした
- String, Number型で投げられた例外を全く拾えていなかったのを修正
- DONノードの場合の期待値/実測値はinspectDOMNodeの結果を出すようにした
- utils.addTabに指定できるオプションにおいて、selectedをtrueにするとタブを即選択するようにした。
- MozUnitテストランナー
- テストの実行にかかった時間をログに出力するようにした
- スタックトレースに内部エラーを出力するかどうかの設定をメニューから変更できるようにした
- setUp/tearDownの両方でエラーが出た場合に、両方とも結果を表示するようにした
- UxUサーバ
- 再起動後のUxUサーバの自動復帰が一度だけでなく何度も行われてしまっていたのを修正
- localhost以外からのアクセスを受け付ける設定を追加
- テスト実行結果をGUI上でより見やすい形で表示するようにした
- 全般
- テストに専用のプロファイルを指定する機能
- テストの対象アプリケーションを指定する機能
- テストケースにおける前初期化処理・後終了処理機能
- assert.contains/assert.notContains追加
- グローバルにインストールする機能
- utils.inspectDOMNodeなどを追加
- Thunderbird 2.0.0.xで初期化に失敗する問題を修正
- メール編集ウィンドウからのメール送信をテストする機能
- Minefield 3.1b2pre対応
- Shredder 3.0b1pre対応
- JavaScriptエラーのスタックトレースが表示されない問題を修正
- MozUnitテストランナー
- コマンドラインオプションでテストを自動実行できるようにした
- テスト結果をテキストファイルとして保存できるようにした
- UxUサーバ
- UxUサーバの動作を全面的に改修
- UxUサーバを起動したまま再起動した場合の自動復帰
- コマンドラインオプションでポート番号を指定してUxUサーバを起動できるようにした
- メニューからのアプリケーション全体の再起動に対応
- アプリケーション再起動後のテストランナーの自動復帰に対応
- 期待値と実測値の差分表示に対応
- Setup/Teardown中のエラーの詳細を表示するようにした
- エラー時にスタックトレースが表示されない場合について改善
- assert.inDelta()追加
- utils.cosmeticClone()(不可視でないファイルのみを複製)を追加
- utils.normalizeToFile()(nsIFileの生成)を追加
- utils.log(), utils.dump()(エラーコンソールへのログ出力)を追加
- utils.scheduleToRemove()(削除できるまでファイルの削除を試行する)追加
- File URLとローカルファイルの相互変換について、XPCOMのオブジェクトと文字列の各組み合わせすべてに対応したメソッドを追加
- UxUサーバにおいて出力のカラー表示に対応
- 以下の新しいアサーションを追加:"strictlyEquals"、 "notStrictlyEquals"
- "equals" と "notEquals" でArray、Date、Object型のオブジェクトの比較も行えるようにした
- UxUサーバの実装を改善、"inspect"でより詳細な情報を表示するようにした
- テスト関数の内容が変化したら次回必ずテストを実行するようにした
- ソース表示で行番号が二重に付くことがあったのを修正
- Linuxでファイルをドラッグ&ドロップした時に固まる問題を修正
- サーバとしての動作が復活
- アサーション失敗時に期待値と実際の値を表組みで表示するようにした
- アサーション追加
- ソース表示時に自動的にウィンドウを広げるようにした
- GUIから説明のページを表示できるようにした
- 仕様が厳密でなかった部分など細かいバグを修正
- fireMouseEventなどの機能について、XUL上でより実用的な動作をするように改良した
- 宣言型テストを推奨するようにした
- "runStrategy"オプションと非同期テスト定義用の書式を廃止した
- 場合に応じてMozUnitテストランナーの各ボタン等を無効化するようにした
- コンテキストメニューからテストを外部エディタで開けるようにした
- 初回のテスト実行に失敗する問題を修正
- オプション指定無しでfireMouseEventが正常に動かない問題を修正
- fireClickEventが動かなくなっていたのを修正
- クリックイベントの再現でXULのメニューを開いたりXULCommandイベントを発行したりするようにした
- 新しいヘルパーメソッドを追加
- GM_addStyleを実装
- MozUnitテストランナーを最前面表示できるようにした
- エラーメッセージ等を選択してコピーできるようにした
- Greasemonkeyスクリプトのテスト用の機能を加えた
- 宣言スタイルでの記述に対応
- ユーティリティの機能をグローバル関数として利用できるようにした
- テストの優先度を設定できるようにした
- 失敗したテストだけ再実行する機能を追加
- 読み込んだファイルが途中で切れる問題を修正
- BOM付きのファイルの読み込みに失敗する問題を修正
- テストのデフォルトの拡張子を.test.jsとした
- この拡張子のJavaScriptファイルとそうでないJavaScriptファイルが混在している時は、拡張子が.test.jsであるものだけをテストとして認識するようにした
- テストケース用のヘルパー関数にDo()追加
- UxUサーバを利用したテスト実行の仕組みを修正
- doIteration内のエラーが上まで伝わってきていなかったのを修正
- テスト実行中はファイルのドロップを受け付けないようにした
- ヘルパーメソッドにdoIterationを追加
- 全体の結果をステータスバーに表示するようにした
- テストケースを指定し直したときは結果表示をリセットするようにした
- アサーションに独自のメッセージを指定できるようにした
- エラー発生時のスタックトレースを正確に辿れるようにした
- レポートを自動的にスクロールするようにした
- 全体のプログレスメーターが表示されなくなっていたのを修正
- Firefox 3のフルズームに対応
- include, readFrom, writeTo, addTab, loadURIで相対パスを受け付けるようにした
- inputTextToFieldでキーボード操作をエミュレートするようにした
- 非同期型のテストを途中で中断できるようにした
- clickイベントの発行時にmousedown/mouseupイベントを、keypressイベントの発行時にkeydown/keyupを発行するようにした
- テストケースのファイルをドラッグ&ドロップで読み込めるようにした
- 初回使用時のエディタ設定がうまくいかない問題を修正
- action.fireMouseEventOnElement()とaction.fireKeyEventOnElement()を正しく動くように修正
- action.inputTextToField()を追加
- Thunderbirdで利用可能にした
- "utils.writeTo()" で常にファイルを上書きするようにした
- フォルダ内のテストケースの一括実行時はJavaScript以外のファイルを無視するようにした
- テスト用ウィンドウに"arguments"オプションで引数を渡せるようにした
- すべてのChromeWindowを取得する"utils.getChromeWindows()"を追加
- ソース表示機能が正しく動いていなかったのを修正
- エラーの詳細情報を改行して表示するようにした
- 略称を「UxU」に変更
- テストケース内に書かれた日本語の説明文などが化けて表示される問題を修正
- ヘルパーメソッドが動かない問題を修正
- "utils.include", "utils.writeTo", "utils.readFrom" のAPIを修正。ファイルのエンコーディングを手動で指定できるようにした
- Firefox 3 beta2で動作するように修正
- プログレスメーターの色がテストの状態に応じて変わるように修正
- yieldに関数を渡せるようにした
- 30秒以上応答がないとタイムアウトするようにした
- スタイル指定が適用されていなかったのを修正
- 名前の間違いを修正
概要
UxUはMozLabをベースに開発されたテスティングフレームワークで、以下の特長があります。
- xUnit形式でテストケースを作成できます。
- GUIや遅延読み込みに関係した機能の自動テストを支援するために、sleepのような処理待ちやヘルパーメソッドなどの便利な機能を備えています。ユニットテスト(単体テスト)だけでなく、結合テスト・機能テストにも幅広く利用できます。
- Greasemonkeyスクリプトのテストを行うための機能を持っています。
- フォルダ内のすべてのテストケースを一度に実行できます。
- MozUnitと上位互換性があります。MozUnit互換のテスト実行インターフェースを持っており、MozUnit用に書かれたテストケースも実行できます。
利用方法
「ツール」メニューの「UnitTest.XUL」から「テストランナー」を選択すると、テスト実行用のインターフェースが起動します。
また、ソケット接続用のサーバを起動することもできます。「ツール」メニューの「UnitTest.XUL」から「UxUサーバを起動」を選択してlocalhostの4444番ポートに接続すると、コンソールからテストを実行することができます。詳細はUxUをコマンドラインインターフェースから利用するを参照してください。
実際のテストケースの記述方法については、UxU用のテストケースの書き方(別ページ)をご覧下さい。
テストランナー
期待値と実測値の差分のカラー表示