Pergunta

Digamos que você tenha um teste FlexUnit parecida com esta:

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{}

O que lança a exceção "Erro # 1065: Variable Bar não está definido." Ele só se aplica a classes internas (classes fora do pacote).

Alguém tem alguma maneira de chegar a este trabalho?

Foi útil?

Solução

Não tenho certeza se existe alguma solução alternativa, mas apenas para confirmar:

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

getDefinitionByName () função
função pública getDefinitionByName (name: String): Object Versão da linguagem: ActionScript 3.0 Versões de tempo de execução: AIR 1.0, Flash Player 9 Retorna uma referência para o objeto classe da classe especificada pela o parâmetro de nome.

Parâmetros

name: String - O nome de uma classe. Retorna Object - Retorna uma referência para o objecto de classe da classe especificada pelo parâmetro de nome.

Lança ReferenceError - No pública definição existe com o especificado nome.

Uma vez que tanto Bar e ChildBar são não-público, você está recebendo esse ReferenceError.

Outras dicas

Eu apenas testada seguinte código com o Flex 3.3 (app 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();
        }        
    }
}

Como resultado traço eu ver:

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

Você pode confirmar isso? Será que isso ajuda?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top