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

时间:2011-09-17 18:00:46

标签: flex flash-builder flexunit flexunit4

FlexUnit 4.1

FlashBuilder 4.5.1

背景

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

问题

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

研究

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

1 个答案:

答案 0 :(得分:2)

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

作为解决方法。只需使用UIImpersonator.addChild()并在TestRunner中添加对mx.core.Container的引用。这可以确保将MX容器用作testEnvironment,并且不会收到“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);
}