質問

次のようなflexunitテストがあるとします:

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:変数バーが定義されていません。"内部クラス(パッケージ外のクラス)にのみ適用されます。

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

役に立ちましたか?

解決

回避策があるかどうかはわかりませんが、確認するだけです:

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

  

getDefinitionByName()関数
  公的機能   getDefinitionByName(name:String):Object   言語バージョン:ActionScript 3.0   ランタイムバージョン:AIR 1.0、Flash   Player 9は、への参照を返します   によって指定されたクラスのクラスオブジェクト   nameパラメーター。

     

パラメータ

     

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

     

Throws ReferenceError—非公開   指定された定義が存在します   名前。

BarとChildBarはどちらも非公開なので、ReferenceErrorが発生します。

他のヒント

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]

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top