我们在Flex 4.1中编写了一个大型的多模块产品,运行在基于Java的中间层之上。
来自Java背景,我希望在Flex环境中获得编写和运行单元测试的支持。
我已经使用FlexUnit的4.1版本更新了Flash Builder 4.5,我可以在应用程序项目上成功编写和执行单元测试,但我还没有弄清楚如何在Flash中的模块或库项目上进行单元测试助洗剂。
图书馆计划的问题
由于我们需要将测试编译到应用程序(SWF),因此我需要在Flash Builder中创建一个配套项目,或者更改库(SWC)项目的依赖项上的链接类型以避免外部,因为外部依赖项应该是预期的由其他人提供(通常是顶级应用程序)。
作为一项实验,我尝试更改示例库项目上的链接:成功生成了一个测试运行器SWF,但FlexUnit无法运行它,因为报告的#1065错误对我没有任何意义。
对于我们的无头构建(使用Gradle),我发现通过简单地合并所有依赖项而不管它们在生成测试运行器SWF时的原始链接,这很容易解决。我也可以使用外部工具支持从Eclipse中轻松运行,因为结果是与通常的JUnit视图中显示的JUnit兼容的XML结果。
你是怎么做到的?
其他Flex开发人员如何在多模块和多库项目中构建单元测试?您是否在Flash Builder 4.5中运行测试?您可以为任何库或模块项目独立运行测试吗?
答案 0 :(得分:2)
好的,这是我第二次回答我自己的问题(最后一个也是围绕Flex)。
我已经开始为每个项目添加测试,但是我从一个中心测试项目中运行测试。
每个项目都应该:
<project name>Test.mxml
命名约定的MLXML应用程序 Flash Builder不喜欢生活在src
之外的任何其他目录中的MXML应用程序,因此 NOT 将test
目录设置为另一个源目录非常重要。
现在将每个项目的test
源目录添加到整个测试项目中。您需要将所有需要的依赖项(运行时和测试)添加到此项目中。
我发现FlexUnit在如何管理单元测试的运行器方面有点奇怪。当您选择'run as - &gt;时,它将提供生成测试运行器MXML应用程序的功能。 Eclipse中的Flex单元测试(您可以选择应运行的测试)。从上下文菜单中选择“执行FlexUnit测试”不会导致生成MXML。
您不应将此MXML文件检入源代码管理中,而应忽略它。原因是如果要运行不同的测试集,FlexUnit不会成功重新生成此文件。这意味着您需要在需要重新生成文件时手动删除该文件。
以下是我们在库项目中用于测试运行器的MXML示例:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600" creationComplete="onCreationComplete()">
<fx:Script>
<![CDATA[
import net.infonic.hs.AllTestsSuite;
import org.flexunit.listeners.CIListener;
import org.flexunit.runner.FlexUnitCore;
private var core: FlexUnitCore;
public function currentRunTestSuite(): Array {
var testsToRun:Array = new Array();
testsToRun.push(AllTestsSuite);
return testsToRun;
}
private function onCreationComplete(): void {
core = new FlexUnitCore();
core.addListener(new CIListener());
core.run(currentRunTestSuite());
}
]]>
</fx:Script>
</s:Application>