Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Acho que agora entendi melhor

Alterei os códigos das Classes que postei ainda neste fórum, implementando o assertEquals. Mas o problema deste método é que ele compara os valores, mas não aceita a lógica que eu criei. Por exemplo, no contexto do meu código o saldo do cliente tem que ser o mesmo do preço da entrada e o mesmo serve para a idade.

package boate;

public class Boate {

    private String nome;
    private String endereco;
    private double tamanho;
    private float precoEntrada;

    public Boate(String nome, String endereco, double tamanho, float precoEntrada) {
        this.nome = nome;
        this.endereco = endereco;
        this.tamanho = tamanho;
        this.precoEntrada = precoEntrada;
    }

    public void liberaEntrada(Cliente cliente) {
        if (cliente.getIdade() >= 18 && cliente.getSaldo() >= this.precoEntrada) {
            System.out.println("Entrada Liberada!");
        } else {
            System.out.println("Entrada Proibida!");
        }
    }

    public void entradaBanheiroFeminino(Cliente cliente) {
        if (cliente.getGenero() == 'F') {
            System.out.println("Pode entrar no banheiro!");
        }
    }

    public String getNome() {
        return nome;
    }

    public String getEndereco() {
        return endereco;
    }

    public double getTamanho() {
        return tamanho;
    }

    public float getPrecoEntrada() {
        return precoEntrada;
    }
}
package test;

import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

import boate.Boate;
import boate.Cliente;

class BoateTest {

    @Test
    void testaEntradaLiberada() {
        Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 120.00f);
        Cliente cl = new Cliente("Lucas", 'M', "222.333.111-00", 23, 120.00f);
        assertEquals(bt.getPrecoEntrada(), cl.getSaldo());
    }

    @Test
    void testaEntradaProibida() {
        Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 120.00f);
        Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 17, 230.00f);
        assertEquals(bt.getPrecoEntrada(), cl.getSaldo());
    }

    @Test
    void testaEntradaBanheiroFeminino() {
        Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 120.00f);
        Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 17, 230.00f);

        assertEquals(cl.getGenero(), 'F');
    }

}

Compilação: Insira aqui a descrição dessa imagem para ajudar na acessibilidade Melhorou?

1 resposta
solução!

Oi Lucas,

O problema é que seus métodos entradaBanheiroFeminino e liberaEntrada estão como void, não devolvendo nada e apenas dando system.out. Desse jeito nos testes não vai ter como realizar os asserts, pois os métodos são voids e não alteram nenhum dos atributos da classe Boate.

Do jeito que você escreveu os asserts eles estão apenas comparando os objetos criados no próprio teste, então na classe Boate em si pode ter qualquer coisa que o teste sempre vai passar ou falhar.

Para os testes fazerem mais sentido o código deveria estar mais ou menos assim:

@Test
void entradaProibidaParaClienteMaiorDeIdadeMasComSaldoInsuficiente() {
    //boate com preco de entrada de R$1000,00
    Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 1000.00f);

    //cliente maior de idade com saldo de R$230,00
    Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 20, 230.00f);

    // verificando se a boate NAO libera a entrada do cliente
    assertFalse(bt.liberaEntrada(cl));
}

@Test
void entradaProibidaParaClienteComSaldoSuficienteMasMenorDeIdade() {
    //boate com preco de entrada de R$1000,00
    Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 1000.00f);

    //cliente menor de idade com saldo de R$2000,00
    Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 17, 2000.00f);

    // verificando se a boate NAO libera a entrada do cliente
    assertFalse(bt.liberaEntrada(cl));
}

void entradaProibidaParaClienteMenorDeIdadeComSaldoInsuficiente() {
    //boate com preco de entrada de R$1000,00
    Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 1000.00f);

    //cliente menor de idade com saldo de R$100,00
    Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 17, 100.00f);

    // verificando se a boate NAO libera a entrada do cliente
    assertFalse(bt.liberaEntrada(cl));
}

@Test
void entradaPermitidaParaClienteMaiorDeIdadeComSaldoSuficiente() {
    //boate com preco de entrada de R$1000,00
    Boate bt = new Boate("Boate Mario Bros", "Rua dos Cogumelos", 500, 1000.00f);

    //cliente maior de idade com saldo de R$2000,00
    Cliente cl = new Cliente("Jorge", 'M', "111.222.111-00", 20, 2000.00f);

    // verificando se a boate libera a entrada do cliente
    assertTrue(bt.liberaEntrada(cl));
}

//outros testes...

E na classe Boate o método liberaEntrada deve devolver um boolean para indicar se libera ou não a entrada de um cliente:

public boolean liberaEntrada(Cliente cliente) {
    if (cliente.getIdade() >= 18 && cliente.getSaldo() >= this.precoEntrada) {
        System.out.println("Entrada Liberada!");
        return true;
    } else {
        System.out.println("Entrada Proibida!");
        return false;
    }
}