Tentar criar um URLHelper para fins de teste com a ajuda de ActionContext () lança uma NullReferenceException.
Passos para reproduzir o comportamento:
Lança a mensagem: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.
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
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.