1
resposta

nao consigo matar mutante apontado pelo stryker

tenho a seguinte classe de teste:

 public class OfertaViagemDesconto
 {

     [Theory]
     [InlineData(120, 30)]     // Caso onde o desconto é maior que o máximo permitido
     [InlineData(100, 30)]     // Caso onde o desconto é exatamente o máximo permitido
     [InlineData(-1, 100)]     // Caso onde o desconto é menor ou igual a zero
     [InlineData(0, 100)]      // Caso onde o desconto é exatamente zero
     [InlineData(70, 30)]      // Caso onde o desconto é exatamente 70%
     [InlineData(20, 80)]      // Caso normal com desconto de 20%
     [InlineData(10, 90)]      // Caso normal com desconto de 10%
     [InlineData(10.5, 89.5)]  // Caso normal com desconto de 10.5%
     public void ValudaCoesGeraisDeDesconto(double desconto, double precoComDesconto)
     {
         // Arrange
         Rota rota = new Rota("São Paulo", "Rio de Janeiro");
         Periodo periodo = new Periodo(DateTime.Now, DateTime.Now.AddDays(1));
         double precoOriginal = 100.00;
         OfertaViagem oferta = new OfertaViagem(rota, periodo, precoOriginal);

         // Act
         oferta.Desconto = desconto;

         // Assert
         Assert.Equal(precoComDesconto, oferta.Preco, 0.001);
     }

 }

e minha model com o metodo AplicarDesconto():

public class OfertaViagem : Valida
{
    public const double DESCONTO_MAXIMO = 0.7;
    private double desconto;

    public int Id { get; set; }
    public Rota Rota { get; set; }
    public Periodo Periodo { get; set; }
    public double Preco { get; set; }
    public double Desconto
    {
        get => desconto;
        set
        {
            desconto = value;
            Preco = AplicarDesconto();
        }
    }

    private double AplicarDesconto()
    {
        if (desconto < 0)
            return Preco;

        if (desconto > 70)
            return Preco * (1 - DESCONTO_MAXIMO);

        return Preco - (Preco * (desconto / 100));
    }


    public OfertaViagem(Rota rota, Periodo periodo, double preco)
    {
        Rota = rota;
        Periodo = periodo;
        Preco = preco;
        Validar();
    }

    public override string ToString()
    {
        return $"Origem: {Rota.Origem}, Destino: {Rota.Destino}, Data de Ida: {Periodo.DataInicial.ToShortDateString()}, Data de Volta: {Periodo.DataFinal.ToShortDateString()}, Preço: {Preco:C}";
    }

    protected override void Validar()
    {
        if (Rota == null || Periodo == null)
        {
            Erros.RegistrarErro("A oferta de viagem não possui rota ou período válidos.");
        }
        if (Preco <= 0)
        {
            Erros.RegistrarErro("O preço da oferta de viagem deve ser maior que zero.");
        }
        if (Rota != null && !Rota.IsValid)
        {
            Erros.RegistrarErro(Rota.Erros.Sumario);
        }
        if (Periodo != null && !Periodo.IsValid)
        {
            Erros.RegistrarErro(Periodo.Erros.Sumario);
        }
    }
}

o stryker esta acusando dois mutantes vivos nos ifs do metodo de aplicardesconto(): Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAo meu ver na minha classe de testes eu apliquei todas as possivilidades de retorno. Alguem pode me auxliar com uma sugestao para matar os mutantes ainda vivos ?

1 resposta

Olá, Gabrielle.

Tudo bem?

Aparentemente, o problema pode estar relacionado ao valor inicial de Preco que não está sendo atualizado corretamente. Vamos ajustar a lógica para garantir que Preco seja atualizado corretamente antes de aplicar o desconto:

private double AplicarDesconto()
{
    if (desconto <= 0)  // Corrigido para <= 0
        return Preco;

    if (desconto >= 70)  // Corrigido para >= 70
        return Preco * (1 - DESCONTO_MAXIMO);

    return Preco - (Preco * (desconto / 100));
}

E certifique-se de que os valores de Preco e desconto estejam sendo configurados corretamente nos testes. Caso contrário, ajuste os valores de entrada para garantir que cobrem todas as condições.

Espero ter entendido e conseguido ajudar. Qualquer dúvida manda aqui de novo. Bons estudos.