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

Lista de exercícios de propriedades (1)

Olá! Tentei fazer como foi mostrado na solução do exercício 1, mas aqui está dando erro. Debuguei e parece que na fase de teste, ele está passando primeiro o valor null para depois passar o -1, e por isso está dando erro, acredito. O que devo fazer? Segue meu código:

Classe Musica

namespace ScreenSound.Models;

internal class Musica
{
    private int? anoLancamento;

    public Musica(Banda artista, string nome)
    {
        Artista = artista;
        Nome = nome;
    }

    public string Nome { get; }
    public Banda Artista { get; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    public string DescricaoResumida => $"A música {Nome} pertence à banda {Artista}";
    public int? AnoLancamento
    {
        get => anoLancamento;
        set
        {
            if (AnoLancamento <= 0)
            {
                anoLancamento = null;
            }
            else
            {
                anoLancamento = value;
            }
        }
    }
}

Classe MusicaConstrutor

[Fact]
public void RetornaAnoDeLancamentoNuloQuandoValorEhMenorQueZero()
{
    // Arrange
    int anoInvalido = -1;
    Banda banda = new Banda("Wallows");
    Musica musica = new Musica(banda, "Test song");

    // Act
    musica.AnoLancamento = anoInvalido;

    // Assert
    Assert.Null(musica.AnoLancamento);
}
1 resposta
solução!

Olá, Izabela.

Tudo bem?

O problema parece ser que o valor null está sendo passado antes do valor -1, causando um comportamento inesperado.

Tenta ajustar a lógica da propriedade AnoLancamento para garantir que o valor seja corretamente validado e atribuído. Abaixo está uma versão ajustada da classe Musica:

namespace ScreenSound.Models;

internal class Musica
{
    private int? anoLancamento;

    public Musica(Banda artista, string nome)
    {
        Artista = artista;
        Nome = nome;
    }

    public string Nome { get; }
    public Banda Artista { get; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    public string DescricaoResumida => $"A música {Nome} pertence à banda {Artista}";
    public int? AnoLancamento
    {
        get => anoLancamento;
        set
        {
            if (value <= 0)
            {
                anoLancamento = null;
            }
            else
            {
                anoLancamento = value;
            }
        }
    }
}

Note que a condição if (value <= 0) foi ajustada para verificar o valor passado (value) em vez de AnoLancamento. Isso deve corrigir o comportamento durante os testes.

Agora, seu teste deve funcionar corretamente:

[Fact]
public void RetornaAnoDeLancamentoNuloQuandoValorEhMenorQueZero()
{
    // Arrange
    int anoInvalido = -1;
    Banda banda = new Banda("Wallows");
    Musica musica = new Musica(banda, "Test song");

    // Act
    musica.AnoLancamento = anoInvalido;

    // Assert
    Assert.Null(musica.AnoLancamento);
}

Essa mudança deve garantir que a propriedade AnoLancamento seja definida como null quando um valor menor ou igual a zero for atribuído.

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