Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Criador de Classe para facilitar testes

Sempre que preciso fazer um teste de uma classe que possua endereço tenho que no teste atribuir os dados do endereço para a classe EnderecoBuilder como abaixo.

        Pais pais = new Pais(1, "Brasil", 0);
        Estado estado = new Estado("MG", "Minas Gerais", 0, 12, pais, RegiaoBrasileira.SUDESTE);
        Cidade cidade = new Cidade(1, "Cidade qualquer", estado, 0, 0);
        Endereco endereco = Endereco.novoEndereco()
                .comLogradouro("Rua A")
                .comNumero("100")
                .comComplemento("sala 1000")
                .comBairro("Bairro qualquer")
                .comCidade(cidade)
                .comCep("00000000");

        Cliente cliente = new Cliente(1,"Jose",endereco);

Gostaria ao invés de escrever a criação do objeto Endereco a cada teste de uma nova classe que possua o atributo endereco, que através de uma outra classe o mesmo fosse criado com um dado padrão. O seu uso obviamente seria somente nas classes de teste. Existe esta prática no mercado? Se existe em qual pacote sugerem coloca-lo e com qual nome?

Exemplo do uso:

@Test
public void test(){
 Endereco endereço = new CriadorDeEnderecoParaTeste.enderecoPadrao();
Cliente cliente = new Cliente(1,"Jose",endereco);
}
3 respostas

Boa tarde, Rui! Como vai?

Se vc quer um objeto padrão do tipo Endereco para todos os seus testes, basta que vc crie um método com a anotação @Before e nesse método faça a criação de tal objeto. Dessa forma, o mesmo objeto do tipo Endereco estará disponível para todos os seus testes! Ficaria algo assim:

public class MeusTestes {
     private Endereco endereco;

     @Before
     public void inicializacao() {
          this.endereco = // cria o objeto do tipo Endereco.
     }

     // faz os seus testes utilizando o atributo 
     // this.endereco sempre que precisar.
}

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!

Mas o que preciso é que o metodo seja utilizado em varias classes de teste e nao dentro de uma unica. Tenho endereco em varias classes. Cliente, Filial, Transportador, etc. Em cada uma destas classes eu possuo o endereco como atributo, ou seja, na classe ClienteTest preciso do endereco. Na outra classe de testes TransportadorTest tambem preciso. Entao o suposto metodo criaEnderecoPadrao seria utilizado em varias classes de testes.

solução!

Nesse caso o que vc precisa é de uma fábrica de Endereco, seguindo o padrão de projeto factory! Ficaria algo assim:

public class EnderecoFactory {
     public Endereco getEndereco() {
          return // cria o objeto do tipo Endereco.
     }
}

E nas classes de teste vc faria algo parecido com o que mostrei antes:

public class ClienteTest {
     private Endereco endereco;

     @Before
     public void inicializacao() {
          this.endereco = 
               new EnderecoFactory().getEndereco();
     }

     // faz os seus testes utilizando o atributo 
     // this.endereco sempre que precisar.
}

public class TransportadorTest {
     private Endereco endereco;

     @Before
     public void inicializacao() {
          this.endereco = 
               new EnderecoFactory().getEndereco();
     }

     // faz os seus testes utilizando o atributo 
     // this.endereco sempre que precisar.
}