Clavico / CursoDigitalOne

15 stars 7 forks source link

Erro no test #1

Closed JessikaFujimura closed 4 years ago

JessikaFujimura commented 4 years ago

Olá Anderson! Estou fazendo o curso de desenvolvimento de aplicações .NET da Digital Innovation One. Estava codando junto com o vídeo, ai tive um erro na hora de rodar o teste, já procurei no google, só que não nenhuma das soluções adiantaram. O erro foi o seguinte:

CursoTest.CategoriasControllerTest.Get_Categoria Fonte: CategoriasControllerTest.cs linha 37 Duração: 1 ms

Mensagem: System.NotSupportedException : Unsupported expression: m => m.SetModified(CategoriasControllerTest._categoria) Non-overridable members (here: Context.SetModified) may not be used in setup / verification expressions. Rastreamento de Pilha: Guard.IsOverridable(MethodInfo method, Expression expression) InvocationShape.ctor(LambdaExpression expression, MethodInfo method, IReadOnlyList1 arguments, Boolean exactGenericTypeArguments) ExpressionExtensions.<Split>g__Split|4_1(Expression e, Expression& r, InvocationShape& p) ExpressionExtensions.Split(LambdaExpression expression) Mock.SetupRecursive[TSetup](Mock mock, LambdaExpression expression, Func3 setupLast) Mock.Setup(Mock mock, LambdaExpression expression, Condition condition) Mock1.Setup(Expression1 expression) CategoriasControllerTest.ctor() linha 30

Por gentileza, gostaria da sua ajuda! Pois pretendo utilizar essa aplicação no meu repositório.

Desde já agradeço a atenção!

Clavico commented 4 years ago

Ola Jessika, tudo bem? Consegue me passar seu repositorio para eu dar uma olhada e te ajudar a identificar onde esta o problema?

JessikaFujimura commented 4 years ago

Oi Anderson! Estou bem sim e você? Acabei de subir pro github. Segue link do repositório https://github.com/JessikaFujimura/SistemaAlunos

Clavico commented 4 years ago

Jessika nao esta disponivel pra mim, segue print image

JessikaFujimura commented 4 years ago

Nossa, esqueci de mudar para público. Já mudei. Desculpas.

Clavico commented 4 years ago

Jessika você vai precisar fazer duas alterações para funcionar. 1- No arquivo Context.cs o metodo SetModified deve ficar assim: public virtual void SetModified(object entity)

2- No construtor da sua classe de teste você vai precisar criar um DbContextOptionsBuilder vai ficar assim:

 public CategoriasControllerTest()
    {
        _mockSet = new Mock<DbSet<Categoria>>();

        var builder = new DbContextOptionsBuilder<Context>(); 
        var options = builder.Options;

        _mockContext = new Mock<Context>(options);
        _categoria = new Categoria { Id = 1, Descricao = "Teste Categoria" };

        _mockContext.Setup(m => m.Categorias).Returns(_mockSet.Object);

        _mockContext.Setup(m => m.Categorias.FindAsync(1))
            .ReturnsAsync(_categoria);

        _mockContext.Setup(m => m.SetModified(_categoria));

        _mockContext.Setup(m => m.SaveChangesAsync(It.IsAny<CancellationToken>()))
            .ReturnsAsync(1);
    }

Provavelmente essa segunda alteração se deve a diferença de versao do .NET Core em que eu usei o 3.0 e você 3.1, mas com isso ja deve funcionar.

JessikaFujimura commented 4 years ago

Deu certo! Muito obrigada pela ajuda!