4

Java ベースの中間層の上で動作する Flex 4.1 で作成している大規模なマルチモジュール製品があります。

Java のバックグラウンドを持っているので、Flex 環境で単体テストの記述と実行をサポートしたいと考えています。

FlexUnit の 4.1 リリースで Flash Builder 4.5 を更新し、アプリケーション プロジェクトで単体テストを正常に記述して実行できますが、Flash Builder 内のモジュールまたはライブラリ プロジェクトで単体テストを動作させる方法を理解していません。

ライブラリ プロジェクトの問題

テストをアプリケーション (SWF) にコンパイルする必要があるため、Flash Builder でコンパニオン プロジェクトを作成するか、ライブラリ (SWC) プロジェクトの依存関係のリンケージ タイプを変更して外部を回避する必要があります。他の誰か (通常は最上位アプリケーション)。

実験として、サンプル ライブラリ プロジェクトのリンケージを変更してみました。テスト ランナー SWF は正常に生成されましたが、FlexUnit は #1065 エラーが報告されたため実行できませんでした。

私たちのヘッドレス ビルド (Gradle を使用) では、テスト ランナー SWF を生成するときに元のリンケージに関係なく、すべての依存関係をマージするだけで簡単に解決できることがわかりました。結果は通常の JUnit ビューに表示される JUnit 互換の XML 結果であるため、外部ツール サポートを使用して Eclipse 内からこれを簡単に実行することもできます。

どのようにしますか?

他の Flex 開発者は、マルチモジュールおよびマルチライブラリ プロジェクトで単体テストをどのように構築していますか? Flash Builder 4.5 内からテストを実行しますか? ライブラリまたはモジュール プロジェクトに対して個別にテストを実行できますか?

4

1 に答える 1

2

OK、これは私が自分の質問に答えたのは 2 回目です (最後の質問も Flex に関するものでした)。

個々のプロジェクトごとにテストを追加しようとしましたが、中央のテスト プロジェクトからテストを実行しています。

各プロジェクトには以下が必要です。

  • テストディレクトリ
  • <project name>Test.mxmltest ディレクトリ内の命名規則の MLXML アプリケーション
  • プロジェクト内のすべてのテストを通常のパッケージ構造の test ディレクトリの下に集約する最上位のテスト スイート
  • いくつかの単体テスト;-)

Flash Builder は、MXML アプリケーションが 以外のディレクトリに存在することを好まないため、ディレクトリを別のソース ディレクトリとして設定しないsrcことが重要です。test

test次に、各プロジェクトのソース ディレクトリをテスト プロジェクト全体に追加します。必要なすべての依存関係 (ランタイムとテストの両方) をこのプロジェクトに追加する必要があります。

FlexUnit が単体テストのランナーを管理する方法が少し奇妙だと思います。Eclipse で「run as -> Flex Unit Tests」を選択すると、テスト ランナー MXML アプリケーションを生成するよう提案されます (実行するテストを選択できます)。コンテキスト メニューから [FlexUnit テストの実行] を選択しても、MXML が生成されません。

この MXML ファイルをソース管理にチェックインするべきではなく、無視してください。これは、別のテスト セットを実行する場合、FlexUnit がこのファイルを正常に再生成しないためです。これは、ファイルを再生成するたびに手動でファイルを削除する必要があることを意味します。

ライブラリ プロジェクトのテスト ランナーに使用する MXML の例を次に示します。

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx="library://ns.adobe.com/flex/mx"
           minWidth="955" minHeight="600" creationComplete="onCreationComplete()">

<fx:Script>
    <![CDATA[
        import net.infonic.hs.AllTestsSuite;

        import org.flexunit.listeners.CIListener;
        import org.flexunit.runner.FlexUnitCore;

        private var core: FlexUnitCore;

        public function currentRunTestSuite(): Array {
            var testsToRun:Array = new Array();
            testsToRun.push(AllTestsSuite);
            return testsToRun;
        }           

        private function onCreationComplete(): void {
            core = new FlexUnitCore();
            core.addListener(new CIListener());
            core.run(currentRunTestSuite());
        }           
    ]]>
</fx:Script>

</s:Application>
于 2011-08-15T13:45:28.837 に答える