1
resposta

Objeto Nullo

Opa galera, tudo bem ?Espero que sim !

Seguinte, eu estou implementando alguns testes e me deparei com a situação a seguir:

Tenho uma classe de Estacionamento, essa classe possui uma propriedade:

public List<OpeningHour> OpeningHours { get; set; }

Por sua vez, minha classe de OpeningHour tem outras duas propriedades:

public class OpeningHour
    {
        public Period Open { get; set; }

        public Period Close { get; set; }
    }

Essas propriedades são do tipo Period que é uma outra classe :

public class Period
    {
        public DayOfWeek DayOfWeek { get; set; }

        public byte Hours { get; set; }

        public byte Minutes { get; set; }
    }

Meu codigo abaixo é a implementação de um teste, onde eu estou tentando pegar as horas em que o estacionamento está aberto e que horas ele fecha.

o parâmetro string linha é uma string enorme que eu faço alguns splits, o resultado desse split é o comentário que você vê logo ali no meio do código.

public List<OpeningHour> ObterHorasFuncionamento(string linha)
        {
            //return new List<OpeningHour>();
            string[] colunas = GetColunas(linha);
            var horas = new List<OpeningHour>();

            // Domingo - 06:00 - 12:00; Segunda - 05:00 - 23:00; Terça - 05:00 - 23:00; Quarta - 05:00 - 23:00; Quinta - 05:00 - 23:00; Sexta - 05:00 - 23:00; Sábado - 06:00 - 20:00

            string[] primeiraSplit = colunas[14].Split(";");

            foreach (var dias in primeiraSplit)
            {
                string[] segundaSplit = colunas[14].Split("-");
                OpeningHour dados = new OpeningHour();
                horas.Add(dados);
            }
            return horas;
        }

Logo abaixo é o código do meu teste:

[Fact]
        public void Obter_Horario_Funcionamento()
        {

            var domingo = new OpeningHour()
            {
                Open = new Period
                {
                    DayOfWeek = DayOfWeek.Sunday,
                    Hours = 6,
                    Minutes = 00
                },
                Close = new Period
                {
                    DayOfWeek = DayOfWeek.Sunday,
                    Hours = 12,
                    Minutes = 00
                }    
            };

            ImportaEstacionamento importador = new ImportaEstacionamento();
            var hrsFuncionamento = importador.ObterHorasFuncionamento(linha);

            Assert.Equal(hrsFuncionamento[0].Open.DayOfWeek, domingo.Open.DayOfWeek);
            Assert.Equal(hrsFuncionamento[1].Close.DayOfWeek, domingo.Close.DayOfWeek);
        }

O problema que estou tendo é que na hora de rodar o teste, as propriedades Open e Close, ou seja os dados que tento adicionar em horas, vem nullos, e não sei como fica o código para eles serem populados.

Galera, sei que ficou grande o post, mas agradeço pra quem tiver saco para ler haha ! Bom fim de semana ae :D

1 resposta

Oi Caio, tudo bom?

Acho que faltou atribuir os dados da string na instancia de OpeningHour dentro do método ObterHorasFuncionario:

public List<OpeningHour> ObterHorasFuncionamento(string linha)
        {
            //return new List<OpeningHour>();
            string[] colunas = GetColunas(linha);
            var horas = new List<OpeningHour>();

            // Domingo - 06:00 - 12:00; Segunda - 05:00 - 23:00; Terça - 05:00 - 23:00; Quarta - 05:00 - 23:00; Quinta - 05:00 - 23:00; Sexta - 05:00 - 23:00; Sábado - 06:00 - 20:00

            string[] primeiraSplit = colunas[14].Split(";");

            foreach (var dias in primeiraSplit)
            {
                string[] segundaSplit = colunas[14].Split("-");
                OpeningHour dados = new OpeningHour();
        // aqui a gente cria uma nova OpeningHour vazia
        // quando esse dado for retornado para o teste
        // teremos os relacionamentos dele nulos
                horas.Add(dados);
            }
            return horas;
        }

Ou seja, criar a nova instância, o ideal seria chamar algo como:

dados.Open =  new Period
                {
                    DayOfWeek = diaDaSemanaQueVeioDoTexto,
                    Hours = horaQueVeioDoTexto,
                    Minutes = minutoQueVeioDoTexto
                }  

A mesma ideia se repete pro Close.

Abraço