Teste

Ae galera, gostaria de um ajudinha…como eu faço pra escrever um teste de um metodo void??

tipo quero testar isso

	public void fechar(int dias)
	{
		this.dias=dias;
		valor=apartamento.getValorDiaria()*dias;
		
	}

como faço??
[]'s

Mas que tipo de teste???

Só pra saber se está funcionando?

Ponha um System.out.println("O valor é: " + valor); e veja se o que apareceu no console é o que você esperava…

Este metodo altera uma variavel de instancia: no caso valor que mesmo vc não tendo colocado this, não foi declarada, se não altera-se não teria sentido o metodo, basta vc escrever o teste em cima desta variavel de instancia.

exato, o teste é para saber se esta funcionando…

teste

package tests.hotel;

import hotel.model.*;
import junit.framework.TestCase;

public class TestHotel extends TestCase{
	
	Categoria categoria = new Categoria("Luxo", 150);
	Apartamento apartamento = new Apartamento(categoria, 3);
	Endereco endereco = new Endereco("Rua", "Aribugu", 550, "Bl 10 Apto 21 b", "São Paulo", "SP");
	Cliente cliente = new Cliente("Luiz Carlos dos Santos", "123456", endereco);
	Hospedagem hospedagem = new Hospedagem(cliente, apartamento);

	Hotel hotel1= new Hotel();
	Endereco e1 = new Endereco("Av. ","Mateo Bei",1420,"","São Paulo", "SP");
	Endereco e2 = new Endereco("Av. ","Mateo Bei",1421,"","São Paulo", "SP");
	Endereco e3 = new Endereco("Av. ","Mateo Bei",1422,"","São Paulo", "SP");
	Endereco e4 = new Endereco("Av. ","Mateo Bei",1423,"","São Paulo", "SP");
	Endereco e5 = new Endereco("Av. ","Mateo Bei",1424,"","São Paulo", "SP");
	Cliente  c1 = new Cliente("Adriano Azevedo","0123",e1);
	Cliente  c2 = new Cliente("Flavia Azevedo","01234",e2);
	Cliente  c3 = new Cliente("Fernando Azevedo","012345",e3);
	Cliente  c4 = new Cliente("Vanessa Azevedo","0123456",e4);
	Cliente  c5 = new Cliente("Vitor Haniel Azevedo","01234567",e5);
		
	public void testListarApartamentos()
	{
		String esperado="";
		String resultado="";
		int cont;
		
		for (cont=0; cont<10; cont++)
		{
		  resultado=resultado+hotel1.listarApartamentos()[cont].toString()+"\n\n";
		}
				
		for (cont=0;cont<=6;cont++)
		{
			esperado=esperado+"Apartamento\nSimples: R$ 85.0\n2 Camas\nStatus: Desocupado.\n\n";	
		}
		for (cont=7;cont<10;cont++)
		{
			esperado=esperado+"Apartamento\nLuxo: R$ 115.0\n1 Camas\nStatus: Desocupado.\n\n";	
		}
				
		assertEquals(esperado,resultado);
	}
	
	public void testAlugarApartamento()
	{
		assertEquals(null,hotel1.alugarApartamento(c3, 3));
		assertEquals(hotel1.listarApartamentos()[0],hotel1.alugarApartamento(c2, 2));
		assertEquals(c2,hotel1.listarHospedes()[0]);		
	}
	
	public void testFecharHospedagem()
	{	
		
		
	}
	
}

Classe a ser testada

package hotel.model;


public class Hospedagem {
	
	private int dias;
	private double valor;
	private Cliente cliente;
	private Apartamento apartamento;
	
	public Hospedagem(Cliente pCliente, Apartamento pApartamento)
	{
		this.cliente=pCliente;
		this.apartamento=pApartamento;
	}
	
	public void fechar(int dias)
	{
		this.dias=dias;
		valor=apartamento.getValorDiaria()*dias;
		
	}

	public Cliente getCliente() {
		return cliente;
	}
	
	public double getValor()
	{
		return valor;
	}

}

Apartamento

package hotel.model;


public class Apartamento {

	private int quantasCamas;
	private String status;
	private Categoria categoria;
	private Hospedagem hospedagem;
	
	public Apartamento(Categoria pCategoria, int pQuantasCamas)
	{
		this.quantasCamas = pQuantasCamas;
		this.categoria = pCategoria;
		status="Desocupado";
	}
	
	public String toString()
	{	
		String apartamento = "Apartamento\n" + categoria + "\n"+ quantasCamas +" Camas\nStatus: "+ status+".";
		return apartamento;
	}
	
	public boolean isDisponivel()
	{
		if (status.equals("Desocupado")){
			return true;	
		}
		else
		{
			return false;
		}
		
	}
	
	public boolean isHospedado()
	{
		if (status.equals("Desocupado")){
			return false;	
		}
		else
		{
			return true;
		}
	}
	
	public boolean podeAcomodar(int essaQuantidadeDeGente)
	{
		if (quantasCamas>=essaQuantidadeDeGente)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public boolean alugar(Hospedagem hospedagem)
	{
		
		if (isDisponivel()) 
		{
			this.hospedagem=hospedagem;
			status="Ocupado";
			return true;
		}
		else
		{
			return false;
		}
		
	}
	
	public void desocupar()
	{
		status="Desocupado";
	}
	
	public Hospedagem getHospedagem() {
		return hospedagem;
	}
	
	public double getValorDiaria()
	{
		return categoria.getPreco();
	}
}

Categoria

package hotel.model;

public class Categoria {
	
	private double preco;
	private String nome;
	
	public Categoria(String pNome, double pPreco)
	{
		this.nome = pNome;
		this.preco = pPreco;
	}
	
	public double getPreco()
	{
		return preco;
	}
	
	public String toString()
	{
		String variavel = nome+": R$"+preco;
		return variavel;
		
	}

}

Sou iniciante…to ficando com dor de kbça…rs

Usando mocks:

@Test
public void testFecharDepoisDeTresDias(){
    Apartamento apartamentoMock = createMock(Apartamento.class);
    Hospedagem hospedagem = new Hospedagem(null, apartamentoMock);
    expect(apartamentoMock.getValorDiaria()).andReturn(200d);
    replay(apartamentoMock);
    hospedagem.fechar(3);
    assertEquals(600d, hospedagem.getValor());
    verify(hospedagemMock);
}

Espero que ajude.

Putz…ainda nao consegui ver isso…mas com certeza ja deu uma clareada na mente!

Valeu!!!

Eu não vi exatamente o que você quer fazer, mas na maioria dos casos, mesmo quando você tem um método void, ele afeta de alguma maneira o sistema. Portanto, você deve testar o que foi alterado, realmente foi alterado conforme o esperado. No seu exemplo, o atributo valor.

Outro detalhe é que se isso for um teste unitário, ele deve testar SÓ a unidade. Caso outros objetos estejam envolvidos na operação, use Mock objects (eu aconselho o JMock) para simular o comportamento desses objetos.