我正在用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单元测试的工作示例?
此答案可能对其他人有帮助,但链接现已断开。希望你在SO上解释了答案 – duggulous