segunda-feira, 30 de janeiro de 2012

Começando com o JUnit

Hoje reservei um tempo para escrever o meu segundo post. Há alguns meses criei o blog e não tive mais tempo para atualiza-lo. Mas vamos que vamos…

A ideia é desenvolver um método utilitário. Seguindo as boas práticas e usando TDD.

As Ferramentas necessárias para o nosso trabalho:
- Java 1.6.0_29 (download);
- Netbeans 7.1 (download);
- JUnit 4.8.2 (download).

Vamos começar com uma ideia simples e desenvolver um método que tem como objetivo avaliar se uma String (java.lang.String) é nula (null) ou vazia (isEmpty()*) e aplicar os testes unitários necessários.

O primeiro passo é criar a classe Util (br.com.joelamalio.utilitario.segundopost.Util) no pacote código-fonte. Em seguida, devemos escrever apenas o código necessário para compilar o projeto.

package br.com.joelamalio.blogutilitario.segundopost;

/**
*
* @author joelamalio
*/
public class Util {

    public static boolean isNullOrEmpty(String valor) {
        //TODO implementar o método.
        return false;
    }

}

Depois criaremos a classe UtilTest (br.com.joelamalio.utilitario.segundopost.UtilTest) no pacote de testes e o nosso primeiro teste de unidade.

package br.com.joelamalio.blogutilitario.segundopost;

import org.junit.Assert;
import org.junit.Test;

/**
*
* @author joelamalio
*/
public class UtilTest {

    @Test
    public void testarSeAStringValorEhNulaEORetornoEhTrue() {
        String valor = null;
        boolean retorno = Util.isNullOrEmpty(valor);
        Assert.assertTrue(retorno);
    }

}

Quando executarmos o build do projeto, o Netbeans alertará um erro, informando que o valor da variável retorno é false e o mesmo deveria ser true, ou seja, o teste FALHOU.
Devemos refatorar o método testado para que ele PASSE. Após a primeira refatoração teremos:

public static boolean isNullOrEmpty(String valor) {
    if (valor == null) {
        return true;
    }
    return false;
}

Após um novo build o teste passará!

Agora já temos um método que valida se a nossa String é nula ou não. O próximo passo é verificar se a String está vazia. Vamos criar mais um teste.

@Test
public void testarSeAStringValorEhVaziaEORetornoEhTrue() {
    String valor = "";
    boolean retorno = Util.isNullOrEmpty(valor);
    Assert.assertTrue(retorno);
}

Novamente o teste falhará e deveremos refatorar o método testado.

public static boolean isNullOrEmpty(String valor) {
    if (valor == null) {
        return true;
    } else if (valor.isEmpty()) {
        return true;
    }
    return false;
}

Ao efetuarmos as mudanças no código o teste passará!
E por último devemos testar se a String não está vazia.

@Test
public void testarSeAStringValorNaoEhVaziaEORetornoEhFalse() {
    String valor = "@joelamalio";
    boolean retorno = Util.isNullOrEmpty(valor);
    Assert.assertFalse(retorno);
}

Código-fonte disponível no github
Assim termina o nosso segundo post.

Até breve.

_____
* Disponível desde o java 1.6.

2 comentários: