1
resposta

[Bug] Erro no método de teste da classe OfertaViagemDalRecuperaMaiorDesconto

Está dando esse erro no metodo de test da minha classe : System.NullReferenceException : Object reference not set to an instance of an object.

aqui está a stack trace :

<>c.<RetornaOfertaEspecificaQuandoDestinoSaoPauloEDesconto40>b__3_0(OfertaViagem o) linha 42
<>c__DisplayClass1_0`1.<CombinePredicates>b__0(TSource x)
WhereEnumerableIterator`1.MoveNext()
OrderedEnumerable`1.TryGetFirst(Boolean& found)
Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Boolean& found)
Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
OfertaViagemDAL.RecuperaMaiorDesconto(Func`2 filtro) linha 52
OfertaViagemDalRecuperaMaiorDesconto.RetornaOfertaEspecificaQuandoDestinoSaoPauloEDesconto40() linha 46
RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

Assim está a minha classe

using Bogus;
using JornadaMilhas.Dados;
using JornadaMilhasV1.Gerenciador;
using JornadaMilhasV1.Modelos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit.Abstractions;

namespace JornadaMilhas.Test.Integracao;
[Collection(nameof(ContextoCollection))]
public class OfertaViagemDalRecuperaMaiorDesconto
{
    private readonly JornadaMilhasContext context;
    private readonly ContextoFixture fixture;

    public OfertaViagemDalRecuperaMaiorDesconto(ContextoFixture fixture)
    {
        context = fixture.Context;
        this.fixture = fixture;
    }

    [Fact]
    // destino = são paulo, desconto = 40, preco = 80
    public void RetornaOfertaEspecificaQuandoDestinoSaoPauloEDesconto40()
    {
        //arrange
        var rota = new Rota("Curitiba", "São Paulo");
        Periodo periodo = new Periodo(new DateTime(2024, 8, 20), new DateTime(2024, 8, 30));
        fixture.CriaDadosfake();
        var ofertaEscolhida = new OfertaViagem(rota, periodo, 80)
        {
            Desconto = 40,
            Ativa = true
        };

        var dal = new OfertaViagemDAL(context);
        dal.Adicionar(ofertaEscolhida);

        Func<OfertaViagem, bool> filtro = o => o.Rota.Destino.Equals("São Paulo");
        var precoEsperado = 40;

        //act
        var oferta = dal.RecuperaMaiorDesconto(filtro);

        //assert
        Assert.NotNull(oferta);
        Assert.Equal(precoEsperado, oferta.Preco, 0.0001);
    }
}
1 resposta

Oi Carlos! Tudo bem?

Esse erro System.NullReferenceException geralmente ocorre quando você tenta acessar um membro de um objeto que está null. Vamos dar uma olhada na sua classe e no método de teste para identificar possíveis pontos onde isso pode estar acontecendo.

Primeiro, verifique se o método CriaDadosfake da sua ContextoFixture está realmente populando o contexto com dados. Se ele não estiver criando os dados corretamente, o context pode estar vazio ou incompleto.

Outro ponto a verificar é se a instância do context está sendo inicializada corretamente na sua ContextoFixture. Se o context estiver null, você terá problemas ao tentar adicionar ou recuperar dados.

Caso tenha verificado todos esses pontos e mesmo assim não tenha encontrado uma solução para o seu problema, peço que compartilhe comigo todo o seu projeto, via GitHub ou Drive do Google, assim poderei realizar testes para identificar o problema.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.