Uma das ações de meus controladores, que está sendo chamada em uma solicitação do Ajax, está retornando uma URL para o lado do cliente para que ele possa fazer um redirecionamento. Estou usando Url.RouteUrl(..)
e durante meus testes de unidade isso falha desde que oController.Url
parâmetro não está pré-preenchido.
Tentei várias coisas, entre outras tentando stub UrlHelper
(que falharam), criando manualmente um UrlHelper
com a RequestContext
que possui uma stub HttpContextBase
(que falhou em umRouteCollection.GetUrlWithApplicationPath
chamada).
Eu pesquisei no Google, mas não encontrei praticamente nada sobre o assunto. Estou fazendo algo incrivelmente estúpido usandoUrl.RouteUrl
na minha ação do Controller? Existe uma maneira mais fácil?
Para piorar, eu gostaria de poder testar o URL retornado no meu teste de unidade - na verdade, só estou interessado em saber que ele está redirecionando para a rota correta, mas como estou retornando um URL em vez de um rota, eu gostaria de controlar o URL que foi resolvido (por exemplo, usando um stubbed RouteCollection
) - mas ficarei feliz em concluir a aprovação do teste.
ApplyAppPathModifier
parte é o pouco crítico para o UrlHelperUma implementação modificada da eu-ge-ne. Este retorna um link gerado com base nas rotas definidas no aplicativo. O exemplo da eu-ge-ne sempre retornava uma resposta fixa. A abordagem abaixo permitirá que você teste se as informações corretas sobre ação / controlador e rota estão sendo passadas para o UrlHelper - que é o que você deseja se estiver testando a chamada para o UrlHelper.
fonte
Esta publicação pode ser útil se você quiser zombar da classe HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
fonte
Com base na resposta da @ eu-ge-ne, que me ajudou muito:
Eu tinha um ActionResult que fazia um redirecionamento e também tinha uma chamada UpdateModel com um parâmetro FormCollection. Para que o UpdateModel () funcione, tive que adicioná-lo ao meu Mocked HttpRequestBase:
Para testar se o URL redirecionado estava correto, você pode fazer o seguinte:
fonte
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html discute como cobrir todas as camadas com testes de unidade. Usa Rhino e MVC.Contrib para o teste de controladores. O código fonte no google pode ser de grande ajuda.
fonte