Olá testes!
Nesse post mostro como criar classes, métodos, solicitar alguma informação do usuário (através da linha de comando) e como criar e executar um teste.
Criando uma saudação
Para começar vamos criar uma aplicação que faz uma saudação para o usuário. A ideia é perguntar qual o nome do usuário e mostrar uma mensagem simples como Oi Fulano!
.
Com esse exemplo vamos criar:
- A classe que realiza a saudação;
- A classe que usa a saudação;
- A classe que testa se a saudação está correta.
Vamos criar uma classe (para quem não conhece classe é basicamente um arquivo que contém atributos (informações) e métodos (operações) que representam algo do mundo real) que sabe fazer uma saudação, para isso crie um arquivo chamado Ola.java
com o seguinte conteúdo:
Esse arquivo pode ser criado usando um bloco de notas ou programa similar, o importante é verificar se o arquivo foi salvo com a extensão .java.
Mas em qual local salvar os arquivos? Sugestão: salve em algum lugar fácil como
C:\Testes
.
Seção perguntas e respostas
Algumas informações importantes para quem está começando:
-
Porque o arquivo chama
Alo.java
? Resposta: Por padrão todo arquivo Java que contém uma classe pública (public class ...
) deve ter o nome do arquivo igual ao nome da classe, nesse caso como a classe pública chamaOla
o arquivo chamaOla.java
. -
O que é esse
public String saudacao(String nome)
? Resposta: Isso é a declaração de um método público, que pode ser acessado por outras classes e que se chama saudacao, esse método recebe como parâmetro umaString
(que representa um texto) chamadonome
e devolve outraString
. -
O que faz o
return
? Resposta: É uma palavra reservada do Java que indica o conteúdo que será retornado no final da execução do método. -
Porque usar as aspas duplas
"..."
? Resposta: Quando escrevemos textos estamos utilizando um tipo de dado chamado String que representa uma sequência de caracteres, esses textos escritos no meio do código são representados pelo uso das aspas duplas"Oi"
.
Criando a interação com o usuário
Continuando vamos criar uma classe que faz a interação com o usuário, essa classe é responsável por perguntar o nome do usuário e apresentar uma mensagem de saúdação. Vamos criar a classe chamada Principal.java
que usa a classe Ola
para realizar a saudação:
Seção perguntas e respostas
Algumas informações importantes para quem está começando:
- O que essa classe faz? Resposta: Essa classe realizará a interação com o usuário, ela perguntará o nome do usuário e fará uma saudação.
- Para que serve esse
import java.util.Scanner
? Resposta: Todas as classes fora do pacotejava.lang
precisam ser importadas para serem utilizadas, para isso utilizamos a palavra-chaveimport
. A declaração do import é feito no começo antes da declaração da classe. - Porque o arquivo chama
Principal.java
e a classe chamaPrincipal
? Resposta: Essa eu já respondi na seção de perguntas e repostas anterior. Qual a sua resposta? - Para que serve o método
public static void main(String[] args)
? Resposta: É através desse método que o programa começará a ser executado. - O que é esse
Scanner s = new Scanner(System.in)
? Resposta: A classeScanner
é usada para tratar entrada de dados, nesse caso quero tratar as entradas de dados doSystem.in
que é o prompt de comando (console ou terminal). - O que faz o
System.out.println(...)
? Resposta: Imprime um texto no prompt de comando. - O que é o
s.nextLine()
? Resposta: Isso é a chamada do métodonextLine()
que está na classeScanner
, esse método vai ler o texto da linha que foi digitada no prompt de comando. O resultado será guardado na variávelString nome
. - O que faz o código
Ola ola = new Ola();
? Resposta: Serve para criar uma instância da classeOla
, em outra palavras, criamos um modelo de objeto chamadoOla
, nesse modelo especificamos como será tratado a saudação ao usuário, e nesse caso estamos criando um novo objeto a partir desse modelo. - O que faz a chamada
ola.saudacao(nome)
? Resposta: Estamos chamamos o métodosaudacao
da classeOla
passando o nome que o usuário informou.
Compilar e executar
O que é compilar?
O código Java que acabamos de escrever é feito de tal forma que podemos ler e entender o que foi escrito, mas não é isso o que o seu computador entende ou no nosso caso não é isso que a Maquina Virtual do Java (Java Virtual Machine - JVM) entende.
A compilação é o ato que gerar um arquivo que a JVM entenda a partir do nosso código Java.
Para compilar o programa, vamos usar o prompt de comando (command), veja alguns comandos usados:
dir
- mostra o conteúdo do diretório atual;cd
- pode ser usado para entrar em algum diretório, exemplos:cd Testes
oucd D:
oucd Testes/Capitulo02
, também pode ser usado para sair de um diretóriocd ..
.
Para compilar um arquivo .java vamos utilizar o comando javac
, exemplo:
Se houver erros de compilação aparecerá algum texto no prompt, caso contrário todo o código foi compilado com sucesso. Note que no diretório que
Para executar um arquivo .class vamos usar o comando java
, exemplo:
Quando executarmos a classe Principal
no Prompt aparecerá a mensagem Qual o seu nome?
, digite o seu nome e aperte ENTER.
O que aconteceu?
Esperamos que tenha aparecido uma mensagem na tela dizendo Olá seu_nome!
O que acabamos de fazer é um teste de usuário para saber se a aplicação está funcionando corretamente, mas imagine você tendo que fazer esse teste em uma grande aplicação parte por parte, com certeza demandaria um grande tempo.
Testando 1, 2, 3, testando
Agora que temos a classe que executa a função de saudação e já temos a classe que faz a interface com o usuário.
Vamos criar um teste de unidade, mas o que podemos testar? Vamos testar se a saudação está sendo feita corretamente, só que agora vamos criar um programa que executa o teste.
Crie um novo arquivo chamado TesteOla.java
, junto com os demais arquivos criados, contendo o seguinte código:
A classe de teste é uma classe Java comum, sendo as principais diferenças os imports do org.junit
e os métodos com as anotações @Test
.
O import org.junit.Test;
informa que queremos usar a anotação chamada Test
, essa anotação serve para informar quais métodos serão os testes do programa, portanto será declarado sempre antes da declaração do método de teste, exemplo:
Nesse código também temos o uso do método assertEquals
, esse método recebe duas informação para verificar se ambas são iguais: primeiro o valor esperado e segundo o valor gerado pelo código, exemplo:
Nesse exemplo o teste está verificando ser o texto "Oi Rafael!"
será igual ao texto devolvido pela chamada do método ola.saudacao("Rafael")
.
O objetivo desse teste é verificar se o método saudacao da class Ola está funcionando corretamente, mas sem termos que manualmente executar o programar.
Agora que criamos o código de teste vamos compilar a classe de teste para isso execute o comando:
Agora para compilar a classe TesteOla.java
precisamos especificar que temos como dependência o arquivo junit-4.12.jar
que é a API do JUnit e precisa da classe Ola
.
Depois, vamos executar a classe de testes TesteOla
. Para executar o teste vamos utilizar a seguinte linha de comando:
Nesse comando especificamos as dependências com as bibliotecas junit-4.12.jar e hamcrest-core-1.3.jar. A classe que executará os testes é a org.junit.runner.JUnitCore
e essa classe que executará os testes que criamos na classe TesteOla
.
Se você estiver executando essa classe no Mac OS ou Linux, ao invés de usar ponto e virgula (;) deve usar dois pontos para separar as dependências.
E como resultado teremos a seguinte saída:
Essa saída informa que um teste foi executado com sucesso. Note que agora executamos o mesmo teste que o usuário executou, mas agora estamos fazendo isso de forma automática.
Conteúdos relacionados
- Introdução ao TDD
- Entendendo o ciclo de desenvolvimento com TDD
- Introdução a refatoração
- O impacto do TDD no design da aplicação