最近、Threadを使ってUnion用のThreadを作る機会が多いのですが、せっかくなのでtestを書こうと思っております。testはもちろん、AS3Unitを使っています。
Threadのtestを書く方法が良く分かりません。どうやるんだろうと思い考えてみたのがこれ。TestThreadはものすごい適当です。
package
{
import flash.events.Event;
import org.libspark.as3unit.*;
import org.libspark.as3unit.assert.*;
import org.libspark.thread.EnterFrameThreadExecutor;
import org.libspark.thread.Thread;
/**
* HogeThreadTest
*/
public class HogeThreadTest
{
beforeClass static function setUp():void
{
// Threadの初期化をしておく
Thread.initialize(new EnterFrameThreadExecutor());
}
test function asyncMethod():void
{
// testしたいThreadを生成
var thread:HogeThreadTest = new HogeThreadTest();
// test用のThreadでラップする
var testThread:TestThread = new TestThread(thread);
// test用のThread完了後にdispatchされるEvent.COMPLETEを待つ
testThread.dispatcher.addEventListener(Event.COMPLETE, async(
function(event:Event):void
{
assertTrue(thread.reactor.isConnected(),
"check whether connected reactor.isConnected() is true or not.");
},1000));
// test用のThreadを実行
testThread.start();
}
}
}
import flash.events.Event;
import flash.events.EventDispatcher;
import org.libspark.thread.Thread;
/**
* Test用のThread
*/
class TestThread extends Thread
{
private var _dispatcher:EventDispatcher;
/**
* Eventを送出するためにEventDispatcherインスタンスを生成
*/
public function get dispatcher():EventDispatcher
{
return _dispatcher;
}
/**
* 保持するThreadインスタンス
*/
private var _thread:Thread;
/**
* runメソッド
*/
override protected function run():void
{
// コンストラクタで受け取ったThreadを実行
_thread.start();
// 実行終わるのを待つ
_thread.join();
// doenを実行する
next(done);
}
private function done():void
{
// Event.COMPLETEを送出する
_dispatcher.dispatchEvent(new Event(Event.COMPLETE));
}
/**
* 引数でThreadを受け取る
* @param thread
*/
function TestThread(thread:Thread):void
{
_dispatcher = new EventDispatcher();
_thread = thread;
}
}
まず、TestThreadを作っておきます。TestThreadは、run()メソッドを実行すると以下のような動作をします。
- コンストラクタで受け取ったThreadを実行(start)して待機(join)します。
- 受け取ったThreadが完了したら、dispatcherからEvent.COMPLETEを送出します。
testコードでは、testしたいThreadをTestThredに渡して、async()メソッドでイベントを待機します。
このようなTestThreadみたいなのって実はネイティブでどこかにあったりするんでしょうか。 みなさん、どのようにThreadのtestを書いているのでしょう?このライブラリのtestに良い例があるよ!とかあったら教えて欲しいですよ!