Boas Práticas do Desenvolvimento de Proxy

Seguir as boas práticas enquanto desenvolve proxies pode ajudar você a tornar o trabalho mais eficiente e efetivo. Considere estes métodos para aperfeiçoar seus esforços de desenvolvimento.
Use a hierarquia apropriada para objetos da GUI

Os objetos da GUI são organizados em duas hierarquias relacionadas: pai-filho e proprietário-propriedade. Um exemplo de relacionamento pai-filho é uma caixa de diálogo e um botão incluído. Um exemplo de um relacionamento proprietário-propriedade é uma janela de nível superior e uma caixa de diálogo. Use qualquer um dos tipos de hierarquia para um objeto.

Na implementação do proxy, é comum para o modelo de objeto subjacente (por exemplo, Java™ e HWND) confundir esses dois relacionamentos e tratar o relacionamento proprietário-propriedade como um relacionamento pai-filho. Nesse caso, o proxy deve negar ter um pai quando o modelo de relacionamento preferencial for proprietário/propriedade. Os métodos que podem ser usados para percorrer a hierarquia são getParent(), getChildren(), getOwner() e getOwned().

Evite retornar tipos diferentes para a mesma propriedade

As propriedades são valores nomeados. A própria propriedade não tem um tipo; o valor tem um tipo. Evite fazer os proxies retornarem tipos diferentes para a mesma propriedade. Às vezes um valor de propriedade pode ser uma referência para um objeto, e não para um valor. Se esse tipo de valor for retornado para um script, será retornado como um TestObject. Os métodos para acessar as propriedades incluem getProperty(), setProperty(), getProperties() e getNonValueProperties().

Use uma Biblioteca de Objetos para designar pesos e propriedades de reconhecimento para os objetos

Por padrão, os novos objetos de proxy podem não ter pesos e propriedades de reconhecimento de objetos. Use a Biblioteca de Objetos para designar os pesos e as propriedades de reconhecimento. Os métodos para acessar os pesos e as propriedades de reconhecimento de objeto são getRecognitionProperties() e getRecognitionPropertyWeight(). Se mais de um objeto da mesma classe existir dentro do objeto-pai, inclua a propriedade .classIndex (um valor numérico positivo começando em 0), como uma propriedade de reconhecimento para o objeto-filho.

Gerencie hierarquias mapeáveis

Geralmente, a hierarquia inteira de objetos é mapeada. No entanto, é muito provável que determinados objetos sejam alterados com freqüência entre builds do aplicativo de teste. Por exemplo, em Java, é comum incluir painéis para objetos de cluster juntos. Com o Functional Tester, o usuário pode especificar não mapear o objeto de proxy. Mesmo assim, os objetos não-mapeáveis não ficam no mapeamento de objeto de teste, a hierarquia de objeto os lista enquanto você percorre a hierarquia pai-filho. Os métodos para gerenciar a hierarquia mapeável incluem shouldBeMapped(), getMappableParent() e getMappableChildren().

Use propriedades canônicas

Em alguns casos, o modelo de objeto subjacente suporta uma noção de propriedades, por exemplo, Java, HTML e .NET. O Functional Tester permite que os proxies implementem propriedades adicionais. Se um proxy implementar uma propriedade diretamente, essa propriedade deverá ter um padrão diferente para evitar confusão com qualquer propriedade do objeto. O início do nome de propriedades regulares que podem ser usadas para reconhecimento deve ser um ponto (.). Determinadas propriedades administrativas são usadas pela estrutura que não pode ser usada para reconhecimento; esses nomes de propriedades começam com um sinal numérico (#).

Chame métodos de objetos

Em muitos casos, o objeto subjacente tem métodos que podem ser encontrados e chamados. Geralmente eles são gerenciados diretamente pela estrutura e pela implementação de domínio, mas getMethod() é comumente implementado em um proxy base em um domínio.

Use métodos com scripts bem definidos

Reproduza as ações do mouse de glass sempre que possível. Se um nome de método incluir "click" ou "drag", os eventos de mouse desempenharão a ação. Não use nomes de métodos como "click" ou "drag" se os eventos de mouse não forem usados para implementar a ação. Não use nomes de métodos que façam referência às teclas ou ao teclado se eventos de teclado não implementarem a ação. Faça com que os métodos reflitam a ação que será desempenhada e autorizada durante a reprodução. Evite a heurística.

Gerencie subitens

Os objetos podem conter outros objetos e podem ter uma estrutura interna que não é exposta como objetos aninhados. Por exemplo, uma lista pode ter itens nela, mas os itens não são expostos pelo objeto da lista como os próprios objetos. Esse tipo de comportamento é comum em objetos baseados em HWND. O método mais comum para lidar com subitens são getSubitem() e métodos de ação do mouse como click(), drag() e doubleClick(). O método getSubitem() retorna um nulo ou uma cadeia.

Use qualquer uma das seguintes estratégias se não desejar que os objetos nos subitens sejam expostos como objetos completos:

Exceções e erros

Siga estas regras enquanto implementa exceções e erros:


Feedback