BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Flex向けのユニットテストツールFluint - 総合テストもカバー

Flex向けのユニットテストツールFluint - 総合テストもカバー

リッチインターネットアプリケーション(RIA)テクノロジが普及するにつれ、RIA開発をサポートためのツールも多くなってきている。FlexのユニットテストツールであるFluint(リンク)もそのひとつだ。

InfoQはFluintの開発者でFlexアーキテクトでもあるMichael Labriola氏(リンク)に、Flex開発でFluintをユニットテストのツールとして使うことについて話を聞いた。彼はこう説明する。

「Fluint」は簡単にいえばFlexでのユニットテストと総合テストのためのフレームワークです。Flex 2あるいはFlex 3のアプリケーションであれば、ウェブブラウザのAdobe Flash Player内で実行されるものでもAdobe AIRでデスクトップで実行されるものでも関係ありません。

もともとFlunitはDigital Primates社(リンク)の大規模プロジェクト用の社内テストツールとして開発された。しかしこのようなフレームワークがFlexコミュニティでだんだんと求められるようになり、 Digital Primates社はこのツールをオープンソースプロジェクトとしてリリースすることを決めた。Flex開発向けのユニットテストツールは他にもあるが、 Labriola氏によるとそれらにはある重要な欠点がありFluintはそれを埋めるという。彼はこう説明する。

Flex のユニットテストツールのプロジェクトはいくつもあります。しかしユニットテストだけでなく総合テストレベルまでカバーするのはFluintだけです。これはいろいろな意味で重要なことです。Flexはコンポーネントフレームワークです。アプリケーションを作る時にはAdobeのコンポーネントを使ったり自分でコンポーネントを作ったりします。しかしコンポーネントというのはテストという面からするととてもよい「単位」とはいえません。コンポーネントの内部は非常に複雑ですし、また横断的な機能は基本的に同期して働くものではありません。
アプリケーションやコンポーネントにメソッドを追加する際にユニットテストをおこなわないといけないことは疑いありませんが、アプリケーションでエラーが起きがちなのが既存のコンポーネントを総合して何か新しいものを組み上げる部分だというのはよくあることです。既存のフレームワークは非同期性をうまく扱うことができません。そのため非同期なコンポーネントを複数結合させる時には哀れなまでに非効率的なテスト作業をおこなうはめになりがちなのです。

Fluintの典型的な利用ケースを尋ねられると、Labriola氏はこう答えた。

たとえばログインフォームです。これはお決まりの例ではありますが、Fluintのパワーをよく表してくれます。ユーザ名の欄とパスワードの欄、そしてログインボタンのあるシンプルなログインフォームを想像してください。ログインボタンが押されるとクライアント側で2つの欄の入力内容をチェックします。ユーザ名とパスワードが1文字以上あるいは長すぎないか、無効な文字が含まれてないか。このチェックが通ればユーザ名とパスワードと一緒にログインイベントが送信され、ログインロジックの他の部分が実行されます。もしチェックに通らなければ画面にエラーメッセージが表示されることになります。

Flexの初級者でもこのコンポーネントは書けるはずです。しかしそのコンポーネントを完璧にテストできるツールは今のところFluintしかありません。

Labriola氏はFluintの特徴的な機能をいくつか説明するのに、上記のようなケースでのシンプルなテストであってもFluintを際だたせる次のステップを示した。

  • テスト時にディスプレイリストへコンポーネントを追加する - メソッドのテストが必要なコンポーネントの内部ライフサイクルがこのステップでスタートする。このステップは他のテストフレームワークに欠けている点で、それらではUIComponent(FlexのGUIコンポーネント基底クラス)が実際にはディスプレイリストに追加されないでテストがおこなわれる。
  • イベントテストに必要な準備が終わるのを待つ- 既存のテストフレームワークの大半では、複数の非同期イベントを待ってテストすることができない。
  • コンポーネントが「ログイン」イベントを送信できること、ユーザ名とパスワードのチェックがおこなわれることを保証する - これはほとんどのテストフレームワークが完全にはカバーできてない点だ。ログインテストで単にスクリーンショットの比較をすることもあるが、これはイベントについてテストしたい時には役に立たない。イベントは視覚的に比較できないのだ。またこれは自動入力ツールがチェックできないことでもある。一般的に自動入力ツールは操作を記録して、指定したフィールドに任意のデータを入力してテストをおこなう。その意味ではそういったツールの目的ではないものの、 Fluintなら問い合わせイベントと結果生じるイベントをキャッチできる。

Fluint開発についてLabriola氏はこう語る。

Fluintはテストフレームワークと関連クラスをまとめたActionScriptライブラリからできています。またMXMLで書かれたテストランナもサンプルとして含んでいます。この2つさえあればFluintを使ったテストをウェブブラウザ上で実行できます。もし自動テストをおこなう環境に組み込みたいのであれば、それ用にAdobe AIRで書かれたテストランナがあります。これは別のモジュールとしてコンパイルしたテストを実行し、その結果をXMLファイルに出力します。このXML ファイルはJUnitの出力ファイルと互換性があるので、既存のレポーティングツールをFluintでも使うことができます。そして、このAIRのテストランナを手軽に実行するためのANTタスクもFluintに含まれています。

今後の拡張についてはこう語る。

コミュニティからはいくつもの素晴らしい機能強化が提案されていて、それらはFluintの次のバージョンに取り入れられることになるはずです。今はパフォーマンス改善に取り組んでいて、テストランナの非効率な部分が取り除かれることで大量のテストをおこなう時に3倍以上のパフォーマンスが得られるようになるでしょう。一方で、私たちはこのプロジェクトに参加してくれる人を積極的に求めています。これまではDigital Primatesが主な推進役を担ってきましたが、今後Fluintがコミュニティのプロジェクトになっていくことをわたしたちは望んでいます。
 

原文はこちらです:http://www.infoq.com/news/2008/10/fluint-unit-test-for-flex

この記事に星をつける

おすすめ度
スタイル

BT