Implementando Entidades: Objetos falsos

Introdução

Após a implementação de nossa entidade Funcionário é preciso criar os objetos falsos equivalentes a nossa entidade Funcionário, os mesmos serão adicionados futuramente no banco de dados e serão utilizados para testar rotinas que [CRUD] (http://pt.wikipedia.org/wiki/CRUD) voltadas a um Funcionario.

Nota: Os teste não fazem parte do escopo deste artigo.

Antes de iniciar

Este item exige conhecimentos sobre:

  • TDD
  • Construtores

Criando Objetos Falsos

Siga o checklist abaixo: <table class="table table-bordered">

Onde e como criar construtores falsos? help! Onde e como criar objetos falsos? help!

</table>

Onde e como criar construtores falsos?

Os construtores falsos ficarão no mesmo pacote que a interface, porém no diretório de testes /src/test/java/ do projeto com o nome padrão: ConstrutorDeNomeDaEntidadeFalso.java

  1. Crie a classe `ConstrutorDeFuncionarioFalso`
  2. Implemente a interface `Funcionario.Construtor`
  3. Crie os atributos definidos na interface
  4. Crie um método destes atributos retornando `ConstrutorDeFuncionarioFalso`
  5. Crie um método `novaInstancia()` retornando `Funcionario`
public class ConstrutorDeFuncionarioFalso implements Funcionario.Construtor {

  private String nome;
  private String matricula;
  private LocalDate dataNascimento;
  private LocalDate dataAdmissao;
  private LocalDate dataDemissao;
  private Superior superior;
  private Diretor diretor;

  @Override
  public Funcionario novaInstancia() {
    return new FuncionarioJdbc(this);
  }

  public ConstrutorDeFuncionarioFalso nome(String nome) {
    this.nome = nome;
    return this;
  }

  public ConstrutorDeFuncionarioFalso matricula(String matricula) {
    this.matricula = matricula;asilva
    return this;
  }

  public ConstrutorDeFuncionarioFalso dataNascimento(LocalDate dataNascimento) {
    this.dataNascimento = dataNascimento;
    return this;
  }

  public ConstrutorDeFuncionarioFalso dataAdmissao(LocalDate dataAdmissao) {
    this.dataAdmissao = dataAdmissao;
    return this;
  }

  public ConstrutorDeFuncionarioFalso dataDemissao(LocalDate dataDemissao) {
    this.dataDemissao = dataDemissao;
    return this;
  }

  public ConstrutorDeFuncionarioFalso superior(Superior superior) {
    this.superior = superior;
    return this;
  }

  public ConstrutorDeFuncionarioFalso diretor(Diretor diretor) {
    this.diretor = diretor;
    return this;
  }

  @Override
  public String getNome() {
    return nome;
  }

  @Override
  public String getMatricula() {
    return matricula;
  }

  @Override
  public LocalDate getDataNascimento() {
    return dataNascimento;
  }

  @Override
  public LocalDate getDataAdmissao() {
    return dataAdmissao;
  }

  @Override
  public LocalDate getDataDemissao() {
    return dataDemissao;
  }

  @Override
  public Superior getSuperior() {
    return superior;
  }

  @Override
  public Diretor getDiretor() {
    return diretor;
  }

}

Com um construtor falso podemos criar todos os objetos Funcionario com os atributos que definimos anteriormente. Estes objetos serão instanciados na classe FuncionariosFalso.

Onde e como criar objetos falsos?

Os objetos falsos ficarão no mesmo diretório dos construtores falsos /src/test/java/ com o nome padrão: NomeDaEntidadeFalso.java

  1. Crie a classe `FuncionariosFalso, com `Ctrl + A` selecione a interface EntitySet para a implementar`
  2. Com `Ctrl + 1` adicione os métodos exigidos pela assinatura da interface
  3. Crie os objetos constantes
  4. Crie um método `novo()` retornando um novo objeto `ConstrutorDeFuncionarioFalso`
  5. Crie uma lista imutavél armazenando todos os objetos falsos
  6. Crie um método `getTodos()`
  7. Implemente o método `load(SqlUnit sqlUnit)` passando por parametro a lista dos falsos
  8. Implemente o método `truncate(Truncate truncate)` passando por parametro o nome da tabela em que serão armazenados os dados
  9. Com `Alt + shift + C` crie um construtor sem argumnetos com acesso `default` e selecione a opção `"Omit call to default constructor super()"`
public class FuncionariosFalso implements EntitySet {

  public static final Funcionario FUNCIONARIO_1 = novo()
      .nome("Funcionario 1")
      .matricula("T0033000")
      .dataNascimento(new LocalDate(1980, 6, 01))
      .dataAdmissao(new LocalDate(2004, 12, 10))
      .dataDemissao(new LocalDate(2012, 1, 3))
      .superior(SUPERIOR_1)
      .diretor(DIRETOR_1)
      .novaInstancia();
  public static final Funcionario FUNCIONARIO_2 = novo()
      .nome("Funcionario 2")
      .matricula("00112")
      .dataNascimento(new LocalDate(1982, 6, 01))
      .dataAdmissao(new LocalDate(2004, 10, 10))
      .dataDemissao(new LocalDate(2012, 3, 3))
      .superior(SUPERIOR_1)
      .diretor(DIRETOR_2)
      .novaInstancia();
  public static final Funcionario FUNCIONARIO_3 = novo()
      .nome("Funcionario 3")
      .matricula("T0033010")
      .dataNascimento(new LocalDate(1980, 6, 01))
      .dataAdmissao(new LocalDate(2007, 12, 10))
      .dataDemissao(new LocalDate(2012, 6, 3))
      .superior(SUPERIOR_1)
      .diretor(DIRETOR_3)
      .novaInstancia();

  public static final Funcionario FUNCIONARIO_4 = novo()
      .nome("Funcionario 4")
      .matricula("T00330500")
      .dataNascimento(new LocalDate(1976, 6, 01))
      .dataAdmissao(new LocalDate(2005, 12, 10))
      .dataDemissao(new LocalDate(2012, 12, 3))
      .superior(SUPERIOR_2)
      .diretor(DIRETOR_1)
      .novaInstancia();
  public static final Funcionario FUNCIONARIO_5 = novo()
      .nome("Funcionario 5")
      .matricula("001123")
      .dataNascimento(new LocalDate(1982, 6, 01))
      .dataAdmissao(new LocalDate(1999, 10, 10))
      .dataDemissao(new LocalDate(2012, 5, 3))
      .superior(SUPERIOR_2)
      .diretor(DIRETOR_2)
      .novaInstancia();
  public static final Funcionario FUNCIONARIO_6 = novo()
      .nome("Funcionario 6")
      .matricula("T0033011")
      .dataNascimento(new LocalDate(1980, 6, 01))
      .dataAdmissao(new LocalDate(2007, 11, 10))
      .dataDemissao(new LocalDate(2012, 9, 3))
      .superior(SUPERIOR_2)
      .diretor(DIRETOR_3)
      .novaInstancia();

  public static List<Funcionario> todos = ImmutableList.<Funcionario> builder()
      .add(FUNCIONARIO_1)
      .add(FUNCIONARIO_2)
      .add(FUNCIONARIO_3)

      .add(FUNCIONARIO_4)
      .add(FUNCIONARIO_5)
      .add(FUNCIONARIO_6)
      .build();

  public static List<Funcionario> getTodos() {
    return todos;
  }

  FuncionariosFalso() {
  }

  @Override
  public void truncate(Truncate truncate) {
    truncate.table("DATABASE.FUNCIONARIO");
  }

  @Override
  public void load(SqlUnit sqlUnit) {
    sqlUnit.batchInsert(todos);
  }

  private static ConstrutorDeFuncionarioFalso novo() {
    return new ConstrutorDeFuncionarioFalso();
  }

}

Nota: Utilize o conceito de Fluent Interface que são métodos encadeados para proporcionar um código mais legível.

Códigos-fonte

ConstrutorDeFuncionarioFalso.java
FuncionariosFalso.java

Siga para o próximo passo. Scripts flyway! Continuar!
Leia mais uma vez! Revisar!


 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br