2011-02-05 11 views
16

私が作業しているFlashプロジェクトのActionScript 3コードの単体テストを記述することでコードを改善しようとしていますが、文脈上の対処方法を理解する上での精神的な障害がありますフラッシュプログラムの私は、addChildやステージのようなものや、Flashアプリケーションに典型的なすべての非同期処理(物のロード待ちなどのためのaddEventListeners)に対処する方法については頭がいっぱいです。それは本当に他のどの言語とも違うのですか?開発者はFlashプログラムの独自の環境をどのように処理しますか?ユニットテストのFlash用

いくつかの明確化:

  • これは、Flexとは何の関係もない、何のFlexは全く関与しません。
  • プログラムには、AS3コードファイルとアセットを含むFLAのみが含まれます。

答えて

10

大きな質問です。テストするプロジェクトのどの部分を選択するかは、単一のクラスまたはクラスのコレクション、またはその両方を選択するのが難しい問題です。

ユーザーインターフェイスのテストに関するテストでは、多くのロジックエラーやイベントエラーが発生する可能性がありますが、UIには多くの奇妙なことが起こります。 Flashプロジェクトの多くのエラーは、予期せぬユーザーの対話モードが原因で発生する可能性があります。基本的にベータテスターは、これまで考えていたことのないUIで何かを行います。

プロジェクトがユーザーのやりとり、特にRIA指向ではなくゲーム指向である場合は、テストセット自体をテストすることが重要です。たとえば、アクションAを試してから、アクションBを実行してもかまいません。これは、BがAに依存していることを知っているからです。テスト担当者はAの前にBを試すかもしれません。想定されなかったシナリオと、AとBが単体としてテストされた場合に捕らえられないシナリオです。 A、B、A-> B、およびB-> Aの3つまたは4つのテストを書きたいと思うかもしれないので、状態の数が不足する可能性があります。

何かを検討することは、多くのタスクを自動化するFlexunitのようなテストフレームワークです。

編集:FlexUnitは純粋なAS3でも動作することに注意してください。

+1

+1も素晴らしい答えです。私はいつもUIで可能なすべてをカバーするテストを思いついています。モデルのテストの作成(サーバーへのデータのフェッチ/送信、またはバックグラウンドでのスコアの計算)ははるかに簡単です。 Flexunitは急な学習曲線を持っています。私は間違いなく、hamcrest-as3、flexunitのアドオンを調べることをお勧めします。これは、assert-departmentでもっと意味をなさないものです。 – epologee

+1

FlashアプリケーションのロジックからUIを分離するための良い提案はありますか?私はFlashが視覚的な提示に結びついているので、やりにくいと思っています。 – gunit888

6

私はフロントエンドの表示物から抽象化するアプリケーションロジックが好きです。私は、フロントエンド/ディスプレイのユニットテストには非常に便利だとは思わないが、システムの内部ロジックと機能をユニットテストできる。それはMVCデザインパターンです。

たとえば、敵を攻撃できるプレイヤーがいるFlashゲームがあるとします。クラスPlayer、クラスMonster、メソッドPlayer.attack(monster:Monster)があります。

ユニットテストでは、値はPlayerMonsterに設定され、attack()に電話して、結果が正しいことを確認します。

フロントエンドのディスプレイ、ステージ、クリック可能なオブジェクトなど、UIは、実際の環境で適切な場合にこれらのオブジェクトを呼び出します。

単体テストは、モデルオブジェクト(PlayerMonsterなど)をインポートするテストを実行する別の.swfファイルで実行されますが、すべての視覚的/表示要素は完全に無視されます。私は、ユーザーのやり取りを伴う何かをユニットテストすることは避けています。

+0

私は大きな問題を抱えていると思いますが、UIとロジックを一緒にバンドルする傾向があります。たとえば、クラスのすべてのコード(ビジュアルアニメーションだけでなく、状態とロジック)をライブラリ資産のエクスポートと同じクラスに置くことがよくあります。 FlashサンプルでMVCを使用するためのリソースはありますか? – gunit888

関連する問題