Flash Builder 4.5和FlexUnit 4.1

我们在Flex 4.1中编写了一个大型的多模块产品,运行在基于
Java的中间层之上.

来自Java背景,我希望在Flex环境中获得编写和运行单元测试的支持.

我已经使用FlexUnit的4.1版本更新了Flash Builder 4.5,我可以在应用程序项目上成功编写和执行单元测试,但是我还没有弄清楚如何在Flash Builder中对模块或库项目进行单元测试.

图书馆项目的问题

由于我们需要将测试编译到应用程序(SWF),因此我需要在Flash Builder中创建一个伴随项目,或者更改库(SWC)项目的依赖项上的链接类型以避免外部,因为外部依赖项应该由别人(通常是顶级应用程序).

作为一个实验,我尝试更改示例库项目上的链接:成功生成了一个测试运行器SWF,但是FlexUnit无法运行它,因为在对我没有任何意义的事情上报告了#1065错误.

对于我们的无头构建(使用Gradle),我发现通过简单地合并所有依赖项而不管它们在生成测试运行器SWF时的原始链接,这很容易解决.我也可以使用外部工具支持从Eclipse中轻松运行,因为结果是与通常的JUnit视图中显示的JUnit兼容的XML结果.

你怎么做呢?

其他Flex开发人员如何在多模块和多库项目中构建其单元测试?您是否在Flash Builder 4.5中运行测试?您可以为任何库或模块项目独立运行测试吗?

最佳答案 好的,这是我第二次回答我自己的问题(最后一个也是围绕Flex).

我已经去为每个项目添加测试,但是我从一个中心测试项目运行测试.

每个项目都应该:

>一个测试目录
>一个MLXML应用程序,在测试目录中具有< project name> Test.mxml的命名约定
>顶级测试套件,在通常的包结构中聚合测试目录下项目中的所有测试
>一些单元测试;-)

Flash Builder不喜欢生活在除src之外的任何其他目录中的MXML应用程序,因此不要将测试目录设置为另一个源目录.

现在将每个项目的测试源目录添加到整个测试项目中.您需要将所有需要的依赖项(运行时和测试)添加到此项目中.

我发现FlexUnit在如何管理单元测试的转轮时有点奇怪.当您选择’run as – >时,它将提供生成测试运行器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>
点赞