2010-08-20 125 views
2

我使用ActionScript3和Flash Builder 4构建了一个应用程序作为我的IDE。从命令行生成并运行FlexUnit

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

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

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

但是对于一个自动构建系统来说,这并不好:我想构建测试,运行它们并收集/分析结果,以告知哪些测试失败。

我可以对一些hackery进行成像:破解FlexUnit基础库以将输出转储到stderr而不是仅转到IDE控制台。在swf点浏览器一起打击一些脚本,数到60,杀掉浏览器并检查stderr。

但这是可怕的。

我不得不相信有一些方法可以通过命令行来构建和运行,与自动构建系统很好地协作。

进一步的复杂化:我是一个ActionScript的相对noob(约1个月)。我的背景是C++,makefiles等等。为了让测试甚至在IDE之外构建(一个build.xml文件,ant),我必须做的所有事情对我来说是完整的希腊语,只是从我可以找到的例子中删除。

回答

1

据我所知,只有在浏览器或独立播放器中才能运行swf。只要您能够获取测试结果并退出应用程序,在播放器中运行应该不会成为持续集成环境的问题。

要将测试结果打印到标准输出,您需要向您的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> 

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