0

Flex 4.11.0 と AIR 4.0 を使用してモバイル アプリケーションを構築しています。私の IDE は Flash Builder 4.7 です。ファイル システム アクセスなどの AIR 機能を使用して、多くの単体テストを作成しました。

プロジェクトをジェンキンスのCIジョブに統合しようとしています。次のことを行うANTスクリプトがあります。

  • コンパイル中
  • Android 向けのパッケージング
  • iOS 向けのパッケージング
  • ASDOC の生成

私が今欲しいのは、ANT-Task を記述して単体テストを起動し、後で Jenkins で解析できる XML または HTML でレポートを生成することです。

私は次のことを試しました: - http://tutorials.digitalprimates.net/flexunit/Unit-16.htmlのチュートリアルに従い、サンプルを動作させました。ただし、これは Flash プロジェクトであり、AIR プロジェクトではありません。- https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Ant+Taskのドキュメントを読み、git@github.com:flexunit/flexunit.git から FlexUnit コードをダウンロードしてビルドし、FlexUnit4AIRCIListener を取得します。 swc - 答えを見つけることなく、インターネット上のあらゆる場所から多くの情報を読みます (いくつかのヒントは見つかりましたが、多くの情報は古くなっているか、デッドリンクを参照しています)

私がこれまでに持っているものは次のとおりです。

<taskdef resource="flexUnitTasks.tasks" classpath="${basedir}\libs\flexUnitTasks-4.1.0.jar" />

<target name="test" >
    <echo>Testing...</echo>
    <echo>==========</echo>

    <!-- 1. Compile FlexUnit-Application -->
    <mxmlc file="${PROJECT.src}\FlexUnit.mxml" output="FlexUnit.swf" >
        <load-config filename="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\air-config.xml" append="true" />

        <source-path path-element="${PROJECT.src}" />
        <source-path path-element="${basedir}\test" />
        <library-path dir="${PROJECT.libs}" append="true">
            <include name="**/*.swc" />
            <include name="**/*.ane" />
        </library-path>
        <library-path dir="D:\tools\sdk\flex\4.11.0_AIR4.0\frameworks\libs\air" append="true">
            <include name="airglobal.swc" />
        </library-path>
        <compiler.verbose-stacktraces>true</compiler.verbose-stacktraces>
        <compiler.headless-server>true</compiler.headless-server>
    </mxmlc>

    <!-- 2. Run the compiled SWF -->
    <flexunit swf="FlexUnit.swf" 
                    player="air"
        timeout="180000"
        toDir="${OUTPUT.root}\flexUnit" 
        haltonfailure="false" 
        verbose="true" 
        localTrusted="true"
    />

    <!-- 3. Generate readable JUnit-style reports -->
    <junitreport todir="${OUTPUT.root}\flexUnit">
        <fileset dir="${OUTPUT.root}\flexUnit">
            <include name="TEST-*.xml" />
        </fileset>
        <report format="frames" todir="${OUTPUT.root}\flexUnit\html" />
    </junitreport>
</target>

私の FlexUnit.mxml-Application の関連部分は次のとおりです。

        protected function onCreationComplete(event:FlexEvent):void
        {
            core = new FlexUnitCore();
            core.addListener(new AirCIListener());
            core.run(currentRunTestSuite());
        }
        public function currentRunTestSuite():Array
        {
            var testsToRun:Array = new Array();
            testsToRun.push(test.suites.CLXSatelliteTestSuite);
            return testsToRun;
                    }

ステップ 1. ANT-Task から動作します (少なくとも FlexUnit.swf を取得します)。ただし、タスクで SWF を起動すると<flexunit>失敗します。

VerifyError: Error #1014: Class flash.filesystem::File could not be found.

コンソール出力: [flexunit] Generating default values ... [flexunit] Using default working dir [D:\workspaces\flex\projects\clx-satellite] [flexunit] テスト実行に次の設定を使用: [flexunit] FLEX_HOME: [D:\tools\sdk\flex\4.11.0_AIR4.0] [flexunit] haltonfailure: [false] [flexunit] headless: [false] [flexunit] 表示: [99] [flexunit] localTrusted: [true] [flexunit ] player: [flash] [flexunit] port: [1024] [flexunit] swf: [D:\workspaces\flex\projects\clx-satellite\FlexUnit.swf] [flexunit] timeout: [180000ms] [flexunit] toDir: [D:\workspaces\flex\projects\clx-satellite\deploy\flexUnit] [flexunit] サーバー プロセスのセットアップ中... [flexunit] サーバーの起動中... [flexunit] ポート [1024] でサーバー ソケットを開いています。[flexunit] クライアント接続を待機しています... [flexunit] OS: [Windows] [flexunit] プレーヤーの起動: [flexunit] 'rundll32' を引数で実行: [flexunit] 'url.dll,FileProtocolHandler' [flexunit] 'D:\workspaces\flex\projects\clx-satellite \FlexUnit.swf' [flexunit] 実行可能ファイルと引数を囲む ' 文字は [flexunit] コマンドの一部ではありません。[flexunit] クライアントが接続されました。[flexunit] インバウンド バッファ サイズを [262144] バイトに設定します。[flexunit] データを受信して​​います ... [flexunit] テスト データの送信を開始するためにプレーヤーに確認を送信しています ... [フレックスユニット] [フレックスユニット] サーバーを停止しています ... [フレックスユニット] テスト データの終わりに達し、プレーヤーに確認を送信しています ... FileProtocolHandler' [flexunit] 'D:\workspaces\flex\projects\clx-satellite\FlexUnit.swf' [flexunit] 実行可能ファイルと引数を囲む ' 文字は [flexunit] コマンドの一部ではありません。[flexunit] クライアントが接続されました。[flexunit] インバウンド バッファ サイズを [262144] バイトに設定します。[flexunit] データを受信して​​います ... [flexunit] テスト データの送信を開始するためにプレーヤーに確認を送信しています ... [フレックスユニット] [フレックスユニット] サーバーを停止しています ... [フレックスユニット] テスト データの終わりに達し、プレーヤーに確認を送信しています ... FileProtocolHandler' [flexunit] 'D:\workspaces\flex\projects\clx-satellite\FlexUnit.swf' [flexunit] 実行可能ファイルと引数を囲む ' 文字は [flexunit] コマンドの一部ではありません。[flexunit] クライアントが接続されました。[flexunit] インバウンド バッファ サイズを [262144] バイトに設定します。[flexunit] データを受信して​​います ... [flexunit] テスト データの送信を開始するためにプレーヤーに確認を送信しています ... [フレックスユニット] [フレックスユニット] サーバーを停止しています ... [フレックスユニット] テスト データの終わりに達し、プレーヤーに確認を送信しています ... [flexunit] インバウンド バッファ サイズを [262144] バイトに設定します。[flexunit] データを受信して​​います ... [flexunit] テスト データの送信を開始するためにプレーヤーに確認を送信しています ... [フレックスユニット] [フレックスユニット] サーバーを停止しています ... [フレックスユニット] テスト データの終わりに達し、プレーヤーに確認を送信しています ... [flexunit] インバウンド バッファ サイズを [262144] バイトに設定します。[flexunit] データを受信して​​います ... [flexunit] テスト データの送信を開始するためにプレーヤーに確認を送信しています ... [フレックスユニット] [フレックスユニット] サーバーを停止しています ... [フレックスユニット] テスト データの終わりに達し、プレーヤーに確認を送信しています ...

BUILD FAILED
D:\workspaces\flex\projects\clx-satellite\build.xml:148: 
java.util.concurrent.ExecutionException: could not close client/server socket

File-Class を使用しない単一のテストを含めると、テストは機能し、同様のエラー ( ReferenceError: Error #1065: Variable flash.desktop::NativeApplication is not defined.) が発生しますが、少なくともテストは実行され、XML 出力が得られます。タスクで使用していますが、FlexUnit は実際には AIR と互換性がないように思えplayer=airます。

ANT を介して AIR アプリケーション (おそらくモバイル アプリケーション) の FlexUnit で単体テストを実行する実例を持っている人はいますか?

4

2 に答える 2

0

気にしないでください、私は自分でそれを理解し、個人的なブログでそれについてブログを書きました: http://www.tiefenauer.info/ci-for-flex-mobile-applications-part-3-performing-unit-tests/

誰かが同じ問題を抱えている場合に備えて、CI プロセス全体について説明しました。

于 2014-04-05T15:12:55.880 に答える
0

これに関する Apache FlexUnit 機能のリクエストは次のとおりです: Apache FlexUnit: FLEX-35090

または、FlexUnit 4.1 の次のフォークを使用して独自の FlexUnit タスクをコンパイルすることで、この機能を利用できます: additionalCompilerOptions ブランチ

カスタム FlexUnit Ant タスクでサポートされるフォーマットは次のとおりです。

<flexunit 
    workingDir="${bin.loc}"
    toDir="${report.loc}" 
    haltonfailure="false" 
    verbose="true" 
    localTrusted="true" >

    <!-- only supported with custom FlexUnit Ant tasks -->
    <additionalCompilerOption option="-define+=MY_CONST::foo,'BAR'" />

</flexunit>
于 2016-05-13T21:26:59.437 に答える