新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


前回はFlexの単体テストの方法を示しました

しかしFlexには非同期通信が行われます

このような場合のテストはどうやって行うのでしょうか?




AS3Unit for Asyncでは、非同期処理のテストを行うことが出来ます。

非同期処理のテスト行うには、org.libspark.as3unit.assert.async関数を使用します。

async関数は、Functionと制限時間を引数に取り、チェックポイント関数を返します。

このチェックポイント関数が、制限時間内に呼び出されるとテストがパスします。

チェックポイント関数が呼び出される際、引数として渡したFunctionを呼び出すので、そこで更にアサーションを行うことも可能です。




次の例は、Timerクラスのテストです。
タイマーが終了(TimerEvent.TIMER_COMPLETE)した時に、Timerのコンストラクタで指定した回数分、TimerEvent.TIMERが発行されているかをテストします。

import org.libspark.as3unit.test;
import org.libspark.as3unit.assert.*;
import flash.utils.Timer;
import flash.events.TimerEvent;

use namespace test;

public class TimerTest
{
test function timer():void
{
  var count:uint = 0;
  var timer:Timer = new Timer(10, 3);
  timer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void
  {
    count++;
  });
  timer.addEventListener(TimerEvent.TIMER_COMPLETE, async(function(e:TimerEvent):void
  {
    timer.stop();
    assertEquals(3, count);
  }, 1000));
  timer.start();
}
}



timer.addEventListenerの部分でイベントハンドラを、チェックポイント関数でラップしています。

その結果、TIMER_COMPLETEハンドラが呼ばれ、はじめてテストがパスするようになります。

「, 1000」という部分が制限時間(ミリ秒)です。

TIMER_COMPLETEハンドラが呼ばれずに1000ミリ秒が経過すると、TimeoutErrorが発生しテストが失敗します。

イベントハンドラの中では、assertEqualsを使い、TIMERハンドラが呼び出された回数(count変数)が、期待する3であるかどうかをテストしています。




http://smileboys.fc2web.com/WebUtility/flex/unitTest.html
スポンサーサイト

テーマ:Flash - ジャンル:コンピュータ

<<FlexのASDocについて | ホーム | Flexの単体テスト(UnitTest)について>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://kanamehackday.blog17.fc2.com/tb.php/69-f9f6ea52
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。