JUnit e métodos que não retornam valores

Oi, sou novo aqui no GUJ e estou achando bom ter encontrado esse fórum.
Estou começando a trabalhar com JUnit, e embora eu tenha estudado Java não tenho muita experiência com ele.
A minha dúvida é a seguinte: quando eu implemento testes em JUnit eu aprendi a comparar o valor retornado pelo método testado. Mas como eu testo um método que não retorna um valor (void)?
O que mais eu devo saber de JUnit?
Grato

Olá,

Seu método deve mudar o estado do objetod e alguma forma, não?

Cheque a mudança :wink:

Shoes

Tem como me dar um exemplo mais concreto? Um trechinho de código…?
Grato

Tenho, mas cole o que você esta testando :wink:

Pessoa p = getPessoa( 1 );
assertNotNull( p );
metodoQueNaoRetornaNadaMasIncrementaAIdadeDaPessoa( p );
assertTrue( p.isMaiorDeIdade() );

Segue abaixo o código que eu fiz! Como devo testar uma classe assim, por exemplo, com JUnit?
Se você puder me dar também umas dicas para melhorar essa classe eu agradeço. Por exemplo seria muito útil um jeito melhor de definir os tipos.
Eu pensei em um enum, mas não encontrei como usar corretamente num caso assim.


// ----------------------------------------------------------------------

// Classe que valida campos de formulário usando expressões regulares

// ----------------------------------------------------------------------

import java.util.regex.*;

public class ValidaCampo {
	
	private int numeroTipo;
	private Pattern padrao;
	private Matcher encaixe;
	private boolean valido;
	
	private final int CEP=0;
	private final int CNPJ=1;
	private final int CPF=2;
	private final int DATA=3;
	private final int EMAIL=4;
	private final int HORA=5;
	private final int INTEIRO=6;
	private final int IP=7;
	private final int NUMERICOS=8;
	private final int PALAVRAS=9;
	private final int TELEFONE=10;
	private final int URL=11;

	public ValidaCampo(){
		setTipo(-1);
		escolhePadrao(getTipo());
		setEncaixe("");
		setValido(valida());
	}
	
	public ValidaCampo(String texto,int numeroTipo){
		setTipo(numeroTipo);
		escolhePadrao(getTipo());
		setEncaixe(texto);
		setValido(valida());
	}
	
	private void setValido(boolean valido){
		this.valido=valido;
	}
	
	private void setTipo(int numeroTipo){
		this.numeroTipo=numeroTipo;
	}
	
	private int getTipo(){
		return numeroTipo;
	}
	
	private void setEncaixe(String texto){
		encaixe=padrao.matcher(texto);
	}
	
	private void setPadrao(String padrao){
		this.padrao=Pattern.compile(padrao);
	}
	
	private void escolhePadrao(int numeroTipo){
		switch(numeroTipo){
			case CEP:
				setPadrao("^[0-9]{6}-?[0-9]{3}$");
				break;
			case CNPJ:
				setPadrao("^([0-9]{2}[.][0-9]{3}[.][0-9]{3}/[0-9]{4}-[0-9]{2})|([0-9]{14})$");
				break;
			case CPF:
				setPadrao("^([0-9]{3}[.][0-9]{3}[.][0-9]{3}-[0-9]{2})|([0-9]{11})$");
				break;
			case DATA:
				setPadrao("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/((19|20)[0-9]{2})$");
				break;
			case EMAIL:
				setPadrao("^([a-zA-Z]+([.-_][a-zA-Z0-9]+)?)@([a-zA-Z]+([.-_][a-zA-Z0-9]+)?)[.]([a-zA-Z]{2,3})([.][a-zA-Z]{2,3})?$");
				break;
			case HORA:
				setPadrao("^([0-2][0-3]):([0-5][0-9])$");
				break;
			case INTEIRO:
				setPadrao("^([0-9]*)$");
				break;
			case IP:
				setPadrao("^([0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3})$");
				break;
			case NUMERICOS:
				setPadrao("^([0-9,.]*)$");
				break;
			case PALAVRAS:
				setPadrao("^([a-zA-Z ]*)$");
				break;
			case TELEFONE:
				setPadrao("^([(][0-9]{2}[)])?([(]([0-9]{1})?([Xx]{2})?[0-9]{2}[)])?([0-9]{3,4})-?([0-9]{3,4})$");
				break;
			case URL:
				setPadrao("^(http://)?(www[.])?[a-zA-Z0-9]+(([.-_][a-zA-Z0-9])+)?[.][a-zA-Z]{2,3}([.][a-zA-Z]{2,3})?                  

(/[a-zA-Z0-9]+)?/?([?][a-zA-Z0-9]+(=[a-zA-Z0-9]+)?((&[a-zA-Z0-9]+(=[a-zA-Z0-9]+)?)?)*)?$");
				break;
			default:
				// throw new Exception("Erro. Tipo inexistente.");
		}
	}
	
	private boolean valida(){
		boolean casou=false;
		if(encaixe.find())casou=true;
		return casou;
	}
	
	public boolean casou(){
		return valido;
	}
	
}

Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará endentado.

QUal método você quer testar?

Shoes

Vamos supor que eu queira testar o setTipo() e o escolhePadrao(). Como eu faço?
Porque eu creio que seja importante testar todas as classes, ou estou enganado?

obs:
Para outras dúvidas seria melhor postar outro tópico? Por exemplo: melhorias no código, como evitar o switch, como usar os tipos com um enum…

Testar diretamente getters e setters geralmente não vale a pena. Procure focar em testes nas suas regras de negócio. Nesse caso específico pra você testar o setter é só fazer um test case onde este me´todo seja usado e importante.

QUanto aos outros, sim, e por favor, refatore este código :stuck_out_tongue:

Shoes

“é só fazer um test case onde este me´todo seja usado e importante.”

Desculpe a minha estupidez, mas… você pode me dar esse trecho de código para que eu veja como é? Deve ser algo pequeno.
Grato.