从命令行生成并运行FlexUnit
我使用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),我必须做的所有事情对我来说是完整的希腊语,只是从我可以找到的例子中删除。
据我所知,只有在浏览器或独立播放器中才能运行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>
然后你需要做的就是分析输出。 它不像我们想要的那样优雅,但它应该可以工作。