Que Métodos precisamos na Classe Biblioteca?
Existem alguns métodos na Classe Biblioteca, cuja necessidade, chama a atenção. São eles:
- Métodos "get" para os campos(métodos "set" não são necessários)
- Métodos addLivro e addPessoa
- Métodos removeLivro e removePessoa
- Métodos pegarLivro e devolverLivro
- Método getLivrosDisponiveis
- Método getLivrosEmprestados
- Método getLivrosPessoa
Para providenciar o que está faltando, vamos continuar a usar a metodologia TDD, e os facilitadores do Eclipse.
Sendo assim, nossa primeira ação vai ser criar os métodos "get" para os seguintes campos:
Uma das formas de se conseguir isso, é: com a Classe Biblioteca selecionada.
Na barra de menus selecionar: Source » Generate Getters and Setters...
Na janela que é apresentada, expandir os campos e selecionar apenas os métodos que necessitamos:
Obtendo o seguinte:
Aprendendo e aplicando um pouco mais sobre a metodologia TDD, após qualquer modificação como a que acabamos de fazer, é uma boa hora de reexecutar os testes para garantir que as nossas alterações não tenham gerado nenhum erro. A palavra de ordem é: "Ficou em dúvida, reexecute os testes". Portanto, vamos fazer isso.
Mais uma vez, uma das formas de se fazer isso, é: com a Classe BibliotecaTest selecionada.
Na barra de menus selecionar: Run » Run As » JUnit Test.
Obtendo o seguinte:
Como era de se esperar, os testes continuam passando, afinal era uma alteração bem pequena e foi feita usando um dos facilitadores do Eclipse, mas serve para exercitar o uso de TDD.
O nosso próximo passo será escrever um método de teste para os métodos responsáveis por adicionar e remover Livros.
No entanto, nós vamos precisar de alguns objetos para efetuar estes testes.
- Objetos do tipo Livro
- Objetos do tipo Pessoa
- Um Objeto do tipo Biblioteca
Para evitar duplicidade de código, pois estes objetos podem ser úteis em outros métodos que ainda vão ser criados, existe no JUnit o método "setUp()", que como o nome indica é usado para inicializar o nosso procedimento de teste com tudo que for necessário.
Na verdade, existem alguns "métodos padrão" costumeiramente usados não só na inicialização, como também na finalização e nos próprios testes com JUnit
oneTimeSetUp() setUp() testEmptyCollection() tearDown() setUp() testOneItemCollection() tearDown() oneTimeTearDown()
Mas isso á assunto para um curso mais avançado. No momento, vamos abrir a nossa Classe de teste "BibliotecaTest", e criá-lo, assim:
Mas existe um problema com esta implementação. Ocorre que as variáveis: l1, l2, p1, p2 e b1, são locais ao método setUp. Desta forma, elas não estariam disponíveis para os demais métodos da nossa Classe de Teste.
A solução para isso, é simples: basta passar a definição das variáveis para o escopo da Classe, transformando-as em "campos". E mais uma vez, o Eclipse nos ajuda nesta tarefa com um dos seus facilitadores.
É bom que se tenha em mente, que em geral, o Eclipse os dá ao menos três formas diferentes para obter um determinado resultado: Um usando a barra de menus, outro usando o menu de contexto no próprio código fonte e um terceiro usando teclas de atalho.
Neste caso específico, vamos ver cada um deles.
Começando pelo menu de contexto no código:
Com a variável l1 selecionada, acionar o botão direito do mouse sobre ela e no menu de contexto, selecionar: Refactor » Convert Local Variable to Field...
Na tela que se abre em seguida, aceitar os valores default e acionar o botão OK.
Obtendo o seguinte:
Agora, usando a barra de menu:
Com a variável l2 selecionada, na barra de menus selecionar: Refactor » Convert Local Variable to Field...
Na tela que se abre em seguida, aceitar os valores default e acionar o botão OK.
Obtendo o seguinte:
Finalmente, usando as teclas de atalho:
Com a variável p1 selecionada, acionar: Alt + Shift + T. Isso faz surgir direto o menu de contexto específico de Refatoração, no qual basta selecionar: Convert Local Variable to Field..., ou simplesmente usar a tecla "v".
Na tela que se abre em seguida, aceitar os valores default e acionar o botão OK.
Obtendo o seguinte:
Fazendo o mesmo para as variáveis: p2 e b1, usando, dos métodos expostos o que você julgar mais cômodo, obteremos o seguinte:
É uma dúvida frequente dos iniciantes neste ponto, querer saber qual a diferença entre uma Variável e um Campo?
Como vimos nos procedimento acima, todos são Variáveis, só que: aquelas variáveis definidas a nível da Classe, são também chamadas de Campos (Fields), apenas nomenclatura.
Feito isso, podemos agora criar o nosso novo método de teste para a inclusão de Livros.
Mais uma vez, usando os facilitadores do Eclipse, inicie a construção do método pela inicialização dos objetos necessários, assim:
Em seguida, precisamos garantir que o objeto principal do nosso teste esteja vazio, assim:
O próximo passo, é adicionar livros na nossa biblioteca, assim:
Ocorre que: o método "addLivro" ainda não existe. Vamos usar o auxílio do Eclipse para a correção de erros que aparece na imagem acima, e criar o método (vazio por enquanto) na Classe Biblioteca, assim:
Uma vez adicionados os Livros, devemos garantir que o objeto não está mais vazio e possui 2 (dois) itens, assim:
Além disso, devemos garantir que os índices dos objetos são os esperados, assim:
O próximo passo, é testar da mesma forma os efeitos do método "removeLivro".
Na situação atual, se removemos um dos Livros da Biblioteca, deve restar apenas 1, portanto:
Neste momento, o método "removeLivro", não existe. Vamos usar o mesmo procedimento já usado anteriormente, para criar este método vazio (por enquanto), na Classe Biblioteca, obtendo o seguinte:
Além dos testes já efetuados, podemos ainda garantir que o índice do segundo Livro, passou a ser 0 (zero), lembrando que: quando havia dois objetos do tipo Livro, o primeiro tinha índice 0 (zero) e o segundo o índice 1 (um). Agora que retiramos o primeiro Livro, o índice do segundo Livro deve passar a ser 0 (zero).
Vamos verificar isso, desta forma:
Para finalizar, vamos fazer de forma semelhante o teste dos efeitos de remover o Livro que havia sobrado, assim:
Devemos ter voltado à situação inicial, ou seja, o objeto deve estar vazio.
É chegada a hora de implementar os métodos que vão cuidar de adicionar e remover os Livros, na Classe Biblioteca, assim:
Agora, devemos usar exatamente os mesmos procedimentos para criar os métodos para adicionar e remover Pessoas, usando é claro a metodologia TDD e começando pelos seus respectivos testes.
Sendo assim, o método de teste deve ficar assim:
E os métodos implementados na Classe Biblioteca, devem ficar desta forma:
Com todos os métodos prontos, devemos executar novamente os testes, neste momento, o ideal é que a nossa suite de testes seja alterada incluindo a classe "BibliotecaTest", assim:
Com a nossa Suite de testes (AllTests) alterada desta forma, podemos testar toda a aplicação e devemos obter sucesso, assim:
Podemos verificar neste momento, usando a Visão "Outline", que a Classe Biblioteca já possui vários métodos implementados:
Nenhum comentário:
Postar um comentário