2014-01-31 24 views
0

我正在用Flex 4.11.0和AIR 4.0构建移动应用程序。我的IDE是Flash Builder 4.7。我写了很多单元测试,其中一些使用AIR功能,例如文件系统访问。在Jenkins的AIR Mobile项目的FlexUnit ANT任务

我正在尝试将项目整合到jenkins上的CI作业中。我有一个Ant脚本执行以下操作:

  • 编译
  • 打包Android
  • 包装适用于iOS
  • ASDOC生成

我现在想要的是写ANT-任务启动我的单元测试并生成XML或HTML的报告,之后可由Jenkins解析。

我试过以下内容: - 按照http://tutorials.digitalprimates.net/flexunit/Unit-16.html上的教程,并得到了示例工作。但是,这是一个Flash项目,而不是AIR-Project! - 阅读有关https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Ant+Task的文档,从[email protected]下载并构建FlexUnit代码:flexunit/flexunit.git以获取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-应用:

 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任务工作(至少我得到FlexUnit.swf)。然而,在<flexunit> -task启动SWF失败:

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

控制台输出: [的FlexUnit]生成默认值... [的FlexUnit]使用默认的工作目录[d:\工作区\弯曲\项目\ [flexunit] [flexunit] haltonfailure:[false] [flexunit]使用以下设置进行测试运行: [flexunit] FLEX_HOME:[D:\ tools \ sdk \ flex \ flexunit] headless:[false] [flexunit] display:[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 flexunit]设置服务器进程... [flexunit]启动服务器... [flexunit]在端口[1024]上打开服务器套接字。 [的FlexUnit]等待客户端连接... [的FlexUnit] OS:[窗口] [的FlexUnit]启动播放器: [的FlexUnit]执行 'RUNDLL32' 与参数: [的FlexUnit] 'URL.DLL,FileProtocolHandler' [flexunit]'D:\ workspaces \ flex \ projects \ clx-satellite \ FlexUnit。swf' [flexunit]'可执行文件和参数周围的字符是 [flexunit]不是命令的一部分。 [flexunit]已连接客户端。 [flexunit]将入站缓冲区大小设置为[262144]字节。 [的FlexUnit]接收数据... [的FlexUnit]发送确认到播放器开始发送测试数据... [的FlexUnit] [的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 - 输出。虽然我在任务中使用player=air,但似乎FlexUnit与AIR不兼容。

您是否有任何人通过ANT为AIR应用程序(可能是移动应用程序)运行FlexUnit单元测试的工作示例?

回答

0

没有针对此位置的Apache的FlexUnit功能要求:Apache FlexUnit: FLEX-35090

或者,您可以通过使用该叉的FlexUnit 4.1编译你自己的FlexUnit任务利用此功能:additionalCompilerOptions branch

的格式支持与定制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>