Aspnetcore: Criar um UrlHelper com ActionContext () resulta em uma NullReferenceException

Criado em 15 jan. 2019  ·  3Comentários  ·  Fonte: dotnet/aspnetcore

Descreva o bug

Tentar criar um URLHelper para fins de teste com a ajuda de ActionContext () lança uma NullReferenceException.

Reproduzir

Passos para reproduzir o comportamento:

  1. Crie uma solução MVC core 2.2 vazia
  2. Crie um projeto de teste xunit
  3. Instale o NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0
  4. Escreva no teste: var Url = new UrlHelper (new ActionContext ());
  5. Teste de corrida

Comportamento esperado

Lança a mensagem: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Contexto adicional

O relatório de bug também pode ser encontrado no StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

Todos 3 comentários

O que acontece aqui é que UrlHelper tenta acessar a propriedade RouteData de ActionContext para verificar se há valores nela causando a exceção. Para corrigir isso, você pode fazer:

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

Esse construtor específico é documentado para ser usado para teste de unidade, mais especificamente quando ActionContext simplesmente precisa ser passado, mas não usado pelo código de consumo. Configurá-lo da maneira sugerida por @navelDirt seria o caminho a percorrer.

Indo mais longe, se sua intenção é testar a unidade se um trecho de código produz um url específico, você terá mais sucesso usando um stub \ mock IUrlHelper . Se você precisar verificar o resultado real, recomendo fortemente escrever um teste de integração

Muito obrigado @navelDirt e @pranavkm.
Fiquei confuso, pois no núcleo 1.1 funcionava sem definir o RouteData, mas ao mudar para o 2.2 ele travou. Por isso achei que era um bug ... desculpe o transtorno.

Esta página foi útil?
0 / 5 - 0 avaliações