ひよっこ。

I want to…

FlexUnit4 補足第3回 – ユーザカスタムメタデータパラメータ –

Posted by hikaruworld : 2009 7月 9

fxug@富山 補足第3回です。
なんだかんだで、補足が多いですねorz…。

さて今回は、User Defined Metadata Parameters
つまり、ユーザによって定義されたメタデータに付与されるパラメータの話になります。
ようするに[Test(milestone=”piyo”)] のことですね。

勉強会でも触れましたが、FlexUnit4のメタデータにはユーザが
好き勝手に任意でkey=value形式でパラメータを設定する事が出来ます。

この値(正確にはメタデータ)は、テスト完了後に参照する事が可能なメソッドが提供されており、
利用したい場合はIRunListenerを実装するクラス(RunListenerなど)を用いてイベントを差し込む事で、
結果の一覧を取得する事が可能になります。

まずは、RunListenerの確認をば。
以下のソースを参照ください。

/** テストクラスの開始時 */
public function testRunStarted( description:IDescription ):void {}
/** テストクラスの完了時 */
public function testRunFinished( result:Result ):void {}
/** [Test]の開始時 */
public function testStarted( description:IDescription ):void {}
/** [Test]の完了時 */
public function testFinished( description:IDescription ):void {}
/** テストが失敗した場合 */
public function testFailure( failure:Failure ):void {}
/** テストの前提条件チェックに失敗した場合 */
public function testAssumptionFailure( failure:Failure ):void {}
/** [Ignore]により無視された場合 */
public function testIgnored( description:IDescription ):void {}

様々なタイミングでイベントを差し込むメソッドが準備されています。
そのうち、org.flexunit.runner.IDescriptionを引数に取っているクラスに関しては、
getMetadata(String) というメソッドを用いて設定されたパラメータを取得することが出来ます。

では、実際にどのように取得できるのか確認してみます。

なお、IDescriptionを実装したクラスにorg.flexunit.runner.Descriptionがあり、org.flexunit.runner.Description.getAllMetadata()というメソッドが実装されています。
当初はこのクラスでパラメータの一覧を取ってみようと思い実行してみたのですが、
以下のようなtraceが出力されました。

Method not yet implemented

ソースをのぞいてみると。。。

public function getAllMetadata():XMLList {
	trace("Method not yet implemented");
	return new XMLList();
}

うーん。思いっきりダミー実装が返されていますw。まぁこの辺りはBeta版ということで、笑って許しましょう。
さて、話を戻します。
先ほども書きましたがgetMetadata(String) というメソッドを用いて設定されたメタデータをXML形式で取得可能です。

例えば、このテストの場合。

[Test(expected="RangeError", description="This one makes sure something works",issueID="12345")]
public function exceptionTest():void
{
	var ary:Array = new Array(-1);
}

ListenerはRunListenerを継承して、testFinished(description:IDescription)の実装をoverrideします。
(必要箇所のみ抜粋)

/**
 * {@inheritDoc}
 */
override public function testFinished( description:IDescription ):void {
	trace(description.getMetadata("issueID"));
}

traceした出力結果は以下の通り。

<metadata name="Test">
  <arg key="expected" value="RangeError"/>
  <arg key="description" value="This one makes sure something works"/>
  <arg key="issueID" value="12345"/>
</metadata>

返されるクラスはXMLですので、後は必要に応じてE4Xなり何なりで処理する事が可能です。
ただし、このgetMetadata(String)に渡すことの可能な引数String型は
Beta1では無視されます。実装が以下の通りなので。

public function getMetadata( type:String ):XML {
	return _metadata;
}

本来は渡されたtypeのメタデータなりパラメータなりを取得してくれると思うのですが、
まぁ、これもβ版ということで笑って流しておきましょう。
正式版が出るまでは、自分でIDescriptionを実装しろってことですよね。

以上。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。