0

次のようなフレックスユニットテストがあるとします。

package foo {
    import flexunit.framework.TestCase;
    import flash.utils.getDefinitionByName;
    import flash.utils.getQualifiedSuperclassName;
    class DescribeTypeTest {
      public function testDescribeInnerType():void {
        var currentInstance:ChildBar = new ChildBar();
        trace(getDefinitionByName(getQualifiedSuperclassName(currentInstance)));
      }
    }
}
class Bar{}
class ChildBar extends Bar{}

これにより、「エラー#1065:変数バーが定義されていません」という例外がスローされます。これは、内部クラス(パッケージ外のクラス)にのみ適用されます。

これを機能させる方法はありますか?

4

2 に答える 2

1

回避策があるかどうかはわかりませんが、確認のために:

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#getDefinitionByName() :

getDefinitionByName () function
public function getDefinitionByName(name:String):Object 言語バージョン: ActionScript 3.0 ランタイム バージョン: AIR 1.0、Flash Player 9 name パラメーターで指定されたクラスのクラス オブジェクトへの参照を返します。

パラメーター

name:String — クラスの名前です。戻り値 Object — name パラメーターで指定されたクラスのクラス オブジェクトへの参照を返します。

ReferenceError をスローします — 指定された名前のパブリック定義が存在しません。

Bar と ChildBar はどちらも公開されていないため、その ReferenceError が発生しています。

于 2009-06-17T01:18:40.563 に答える
0

Flex 3.3 (AIR アプリ) で次のコードをテストしました。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="t();">
    <mx:Script>
        <![CDATA[
            import flash.utils.describeType;
            import flash.utils.getQualifiedSuperclassName;
            private function t():void {
                trace(getDefinitionByName(getQualifiedSuperclassName(new FooBar())));
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>

Bar.as

package
{
    public class Bar
    {
    }
}

FooBar.as

package
{
    public class FooBar extends Bar
    {
        public function FooBar()
        {
            super();
        }        
    }
}

トレース結果として、次のように表示されます。

[SWF] DefTest.swf - 1,024,228 bytes after decompression
[class Bar]

これを確認できますか?それは役に立ちますか?

于 2009-06-17T00:42:42.227 に答える