私たちは職場で約 6 か月間 Flex を使用してきましたが、カスタム コンポーネントを含む FlexUnit テストの最初のバッチは、次のようなパターンに従う傾向があることがわかりました。
import mx.core.Application;
import mx.events.FlexEvent;
import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
private var component:CustomComponent;
public function testSomeAspect() : void {
component = new CustomComponent();
// set some properties...
component.addEventListener(FlexEvent.CREATION_COMPLETE,
addAsync(verifySomeAspect, 5000));
component.height = 0;
component.width = 0;
Application.application.addChild(component);
}
public function verifySomeAspect(event:FlexEvent) : void {
// Assert some things about component...
}
override public function tearDown() : void {
try {
if (component) {
Application.application.removeChild(component);
component = null;
}
} catch (e:Error) {
// ok to ignore
}
}
基本的に、コンポーネントについて確実に検証するには、コンポーネントが完全に初期化されていることを確認する必要があります。Flex では、コンポーネントが表示リストに追加された後、非同期で行われます。そのため、コールバックが発生したときに通知されるように (FlexUnit の addAsync 関数を使用して) セットアップする必要があります。
最近、ランタイムが必要な場所で呼び出すメソッドを手動で呼び出すだけだったので、テストは次のようになる傾向があります。
import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
public function testSomeAspect() : void {
var component:CustomComponent = new CustomComponent();
component.initialize();
// set some properties...
component.validateProperties();
// Assert some things about component...
}
これは従うのがはるかに簡単ですが、どちらかというと少しごまかしているような気がします. 最初のケースは、現在のアプリケーション (単体テスト ランナー シェル アプリ) にそれを叩きつけることであり、後者は「実際の」環境ではありません。
他の人がこの種の状況にどのように対処するのだろうと思っていましたか?