2

我正在使用 ActionScript3 和 Flash Builder 4 作为我的 IDE 构建应用程序。

IDE 支持称为“FlexUnit”的单元测试框架。

我可以在 IDE 中构建和运行测试,没问题。

在经历了许多痛苦和折磨之后,我想出了如何从命令行将单元测试构建为 swf。我可以将浏览器或 Flash 播放器指向 swf 并运行测试。

但是对于自动构建系统来说,这并不好:我想构建测试,运行它们,然后收集/分析结果以判断哪些测试(如果有的话)失败了。

我可以想象一些骇客:破解 FlexUnit 基础库以将输出转储到 stderr 而不仅仅是 IDE 控制台。将一些脚本组合在一起,将浏览器指向 swf,计数到 60,终止浏览器并检查 stderr。

但这很可怕。

我必须相信有一些方法可以从命令行构建和运行,可以很好地与自动构建系统配合使用。

更复杂的情况:我是 ActionScript 的相对菜鸟(约 1 个月)。我的背景是 C++、makefile 等。为了获得测试甚至在 ide 之外构建(一个 build.xml 文件,ant),我必须做的所有事情对我来说都是希腊语,只是从我能找到的示例中剪切 n 粘贴.

4

2 回答 2

1

这篇文章有一个解决方案: http: //devnet.jetbrains.com/message/5507979#5507979。像冠军一样为我工作。

于 2014-01-23T07:08:05.210 回答
1

据我所知,运行 swf 的唯一选择是在浏览器或独立播放器中。只要您能够获得测试结果并退出应用程序,在播放器中运行对您的持续集成环境来说应该不是问题。

要将测试结果打印到标准输出,您需要将 Text 侦听器添加到您的 testunit 核心实例。

core.addListener( TextListener.getDefaultTextListener( LogEventLevel.DEBUG ) );

要在测试运行后退出应用程序...

System.exit(0);

例如,您的顶级 mxml 文件可能如下所示...

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="runMe()" 
    xmlns:adobe="http://www.adobe.com/2009/flexUnitUIRunner"
    >
    <mx:Script>
        <![CDATA[
            import org.flexunit.runner.FlexUnitCore;
            //import org.flexunit.listeners.UIListener;
            //import org.flexunit.listeners.CIListener;
            import org.flexunit.internals.TextListener;
            import mx.logging.LogEventLevel;
            import flash.system.System
            import unit_tests.TestAuthentication.TestAuthentication

            private var core:FlexUnitCore;

            public function runMe():void {
                core = new FlexUnitCore();
                //core.addListener(new UIListener(uiListener));
                //core.addListener(new CIListener());
                core.addListener( TextListener.getDefaultTextListener( LogEventLevel.DEBUG ) );
                core.run( TestAuthentication );
                System.exit(0);
            }
        ]]>
    </mx:Script>
</mx:Application>

然后你需要做的就是解析输出。它不像我们希望的那样优雅,但它应该可以工作。

于 2010-10-04T15:16:17.207 回答