Apache flex FlexUnit:Spark组件测试问题(UIImpersonator)

Apache flex FlexUnit:Spark组件测试问题(UIImpersonator),apache-flex,flash-builder,flexunit,flexunit4,Apache Flex,Flash Builder,Flexunit,Flexunit4,FlexUnit 4.1 FlashBuilder 4.5.1 背景 我正在尝试使用FlexUnit UIImpersonator类测试自定义Flex 4可蒙皮组件。如果我从FlashBuilderSpark-only项目运行测试,一切都会正常工作。如果我尝试从类路径上设置了mx组件的项目进行测试,我会得到一个“getElementIndex在非Flex 4项目中不可用”错误 问题: 我是否可以在FlexUnits可视化测试环境中对spark组件进行单元测试,同时仍然在类路径上设置mx组件 研究

FlexUnit 4.1

FlashBuilder 4.5.1

背景

我正在尝试使用FlexUnit UIImpersonator类测试自定义Flex 4可蒙皮组件。如果我从FlashBuilderSpark-only项目运行测试,一切都会正常工作。如果我尝试从类路径上设置了mx组件的项目进行测试,我会得到一个“getElementIndex在非Flex 4项目中不可用”错误

问题:

我是否可以在FlexUnits可视化测试环境中对spark组件进行单元测试,同时仍然在类路径上设置mx组件

研究

UIImpersonator将其方法调用委托给“TestenEnvironment”。
用于此“TestenEnvironment”的实现由VisualTestenEnvironmentBuilder类和FlexEnvironmentBuilder类决定。如果FlexEnvironmentBuilder类可以在类路径上找到“mx.core.Container”,则返回mx环境,否则返回Spark环境。只有spark环境对UIImpersonator上的Flex 4相关方法调用有有效的实现,就像addElement方法一样。

我也有同样的问题,没有找到任何解决方案。我建议提交一个bug,但由于FlexUnit正在被ApacheFlex采用,我认为它不会很快得到解决

作为解决办法。只需使用UIImpersonator.addChild()并在TestRunner中添加对mx.core.Container的引用。这确保MX容器用作测试环境,并且您不会收到“getElementIndex…”错误

import mx.core.Container

public function runTests():void {
    // reference to mx container
    var containerRef:Container = new Container();

    // Run your testsuite as usual. eg:
    var core:FlexUnitCore = new FlexUnitCore();
    core.run(MyTestSuite);
}