2010-08-20 185 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> 

然後你需要做的就是分析輸出。 它不像我們想要的那樣優雅,但它應該可以工作。