demoiselle / behave

Demoiselle Behave
https://www.frameworkdemoiselle.gov.br/dbehave/
29 stars 53 forks source link

Inicialização de Aplicações Fest Swing #98

Closed rogernobre closed 11 years ago

rogernobre commented 11 years ago

Não conheço fest swing, mas para fazer testes java swing usava o marathon e fazia o seguinte para iniciar automação dos testes:

Fiz o mesmo para usar no demoiselle behave:

O que é que estou fazendo errado?

rogernobre commented 11 years ago

Descobrir que a minha classe "br.gov.serpro.sped.fiscalpva.fronteira.ppgd.PgdApp" não é um frame.

Já descobrir como obter o frame principal depois de iniciar a mainClass (ela faz as configurações iniciais):

PlataformaPPGD plataformaPPGD = PlataformaPPGD.getPlataforma();

JFrame frame = plataformaPPGD.getJanelaPrincipal();

Agora teria que ver no Demoiselle Behave como passaria estas informações, isto é, tenho que inicia a aplicação e depois chamar um método para informar ao Fest quem é o frame principal.

Atualmente, a classe FestRunner faz isto passando somente o nome da classe principal, o que não é o meu caso.

Ainda não conseguir subir minha aplicação sem dar erro como no marathon (mas isto não tem nada haver com o Demoiselle Behave), mas preciso desta maneira citada acima para fazer automação dos testes.

rogernobre commented 11 years ago

A minha ideia seria criar uma classe:

package testes.testesFest;

import javax.swing.JFrame;

import serpro.ppgd.infraestrutura.PlataformaPPGD; import br.gov.serpro.sped.fiscalpva.fronteira.ppgd.PgdApp;

public class Aplicacao {

    public static JFrame getFrame() {
        String[] arg0 = { "-logar" };

        PgdApp.preparaFontes();

        PgdApp.main(arg0);

        PlataformaPPGD plataformaPPGD = PlataformaPPGD.getPlataforma();

        return plataformaPPGD.getJanelaPrincipal();
    }

}

E no FestRunner ter propriedades:

 "behave.runner.app.mainClass.method" (default null)
 "behave.runner.app.mainClass.method.param" (default null)

que chamaria ou o construtor da mainClass caso fosse null ou o o método com os parâmetros passados acima para iniciar a aplicação e passar o frame principal para o Fest

Ex:

behave.runner.app.mainClass=testes.testesFest.Aplicacao
behave.runner.app.mainClass.method=getFrame
behave.runner.app.mainClass.method.param=null
botelhojp commented 11 years ago

@rogernobre, neste caso precisamos criar uma inversão de controle para que você informe a instância do frame e não o dbehave. Talvez o runner tenha um método para receber o Frame.

rogernobre commented 11 years ago

Boa ideia @botelhojp.

botelhojp commented 11 years ago

Segue proposta:

Um property:

behave.runner.app.startupFrame=meupacote.MinhaClasse

Um classe que implemente a interface FestStartup

public class MinhaClasse implements FestStartup {

    public JFrame getFrame() {
        return new JFrameLogin();
    }

}

Sua classe será chamada na inicialização do teste.

botelhojp commented 11 years ago

@rogernobre, gerei uma snapshot com a proposta acima. Vide também o sample treino-desktop. Aguardo retorno.

rogernobre commented 11 years ago

Ok. Pode fechar a issue.