Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercicio 3

Sobre o exercício 3, como posso fazer? Vocês utilizaram uma única string concatenando o Id e a Música, mas a minha exibição é mais complexa, e não tenho ID. Como posso conferir se a exibição estará de acordo, nesse teste? Segue meu código:

public void ExibirFichaTecnica()
{
    Console.WriteLine($"Nome: {Nome}");
    Console.WriteLine($"Artista: {Artista.Nome}");
    Console.WriteLine($"Duração: {Duracao}");
    if (Disponivel)
    {
        Console.WriteLine("Disponível no plano.");
    }
    else
    {
        Console.WriteLine("Adquira o plano Plus+");
    }
}
[Fact]
public void TesteToString()
{
    // Arrange
    string nameSong = "New song test";
    Banda banda = new Banda("Wallows");
    Musica musica = new Musica(banda, nameSong);
    musica.Duracao = 160;
    musica.Disponivel = true;
    string toStringEsperado = @$"Id: {musica.Duracao} Nome: {nameSong}";

    // Act
    string resultado = musica.ExibirFichaTecnica();

    // Assert
    Assert.Equal(toStringEsperado, resultado);
}
2 respostas
solução!

Oi Izabela!

O que você pode tentar, é capturar a saída do Console.WriteLine para comparar com o esperado. Para isso, você pode usar a classe StringWriter para redirecionar a saída do console para uma string:

using System;
using System.IO;
using Xunit;

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

    public string Nome { get; set; }
    public Banda Artista { get; set; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }

    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista.Nome}");
        Console.WriteLine($"Duração: {Duracao}");
        if (Disponivel)
        {
            Console.WriteLine("Disponível no plano.");
        }
        else
        {
            Console.WriteLine("Adquira o plano Plus+");
        }
    }
}

public class Banda
{
    public Banda(string nome)
    {
        Nome = nome;
    }

    public string Nome { get; set; }
}

public class MusicaTests
{
    [Fact]
    public void TesteExibirFichaTecnica()
    {
        // Arrange
        string nameSong = "New song test";
        Banda banda = new Banda("Wallows");
        Musica musica = new Musica(banda, nameSong);
        musica.Duracao = 160;
        musica.Disponivel = true;

        string expectedOutput = "Nome: New song test\n" +
                                "Artista: Wallows\n" +
                                "Duração: 160\n" +
                                "Disponível no plano.\n";

        using (StringWriter sw = new StringWriter())
        {
            Console.SetOut(sw);

            // Act
            musica.ExibirFichaTecnica();

            // Assert
            string result = sw.ToString();
            Assert.Equal(expectedOutput, result);
        }
    }
}

Neste exemplo, redirecionamos a saída do console para um StringWriter, executamos o método ExibirFichaTecnica e comparamos a saída capturada com o resultado esperado.

Espero ter ajudado de alguma forma. Qualquer dúvida manda aqui. Bons estudos.

Deu certo, muito obg!