Mock HttpContext usando moq para teste de unidade [duplicado]

Esta pergunta já tem uma resposta aqui:

Como zombar do HttpContext no ASP.NET MVC usando o Mo 5 respostas

Eu preciso de uma simulação do HttpContext para testes de unidade. Mas estou lutando com iss

Estou criando um método que alteraria o sessionId programaticamente com o SessionIdManager. E SessionIdManager requer HttpContext e não HttpContextBase.

Mas não consegui encontrar nenhum exemplo para zombar do HttpContext. Todos os exemplos lá fora são apenas para criar HttpContextBas

Eu tentei abaixo, mas eles não funcionaram

HttpContext httpContext = Mock<HttpContext>();
HttpContext httpContext = (HttpContext)GetMockHttpContextBase();

public HttpContextBase GetMockHttpContextBase()
{
   var context = new Mock<HttpContextBase>();
   var request = new Mock<HttpRequestBase>();
   var response = new Mock<HttpResponseBase>();
   var session = new Mock<HttpSessionStateBase>();
   var application = new Mock<HttpApplication>();
   var httpContext = new Mock<HttpContext>();
   var server = new Mock<HttpServerUtilityBase>();
   var user = new Mock<IPrincipal>();
   var identity = new Mock<IIdentity>();
   var urlHelper = new Mock<UrlHelper>();
   var routes = new RouteCollection();
   var requestContext = new Mock<RequestContext>();

   requestContext.Setup(x => x.HttpContext).Returns(context.Object);
   context.Setup(ctx => ctx.Request).Returns(request.Object);
   context.Setup(ctx => ctx.Response).Returns(response.Object);
   context.Setup(ctx => ctx.Session).Returns(session.Object);
   application.Setup(x => x.Context).Returns(httpContext.Object);
   context.Setup(ctx => ctx.ApplicationInstance).Returns(application.Object);
   context.Setup(ctx => ctx.Server).Returns(server.Object);
   context.Setup(ctx => ctx.User).Returns(user.Object);
   user.Setup(ctx => ctx.Identity).Returns(identity.Object);
   identity.Setup(id => id.IsAuthenticated).Returns(true);
   identity.Setup(id => id.Name).Returns("test");
   request.Setup(req => req.Url).Returns(new Uri("http://tempuri.org"));
   request.Setup(req => req.RequestContext).Returns(requestContext.Object);
   requestContext.Setup(x => x.RouteData).Returns(new RouteData());
   request.SetupGet(req => req.Headers).Returns(new NameValueCollection());

   return context.Object;
}

Existe alguma maneira de zombar do HttpContext ou usar o HttpContextBase para o HttpContex

Por favor me ajude alguém.

questionAnswers(2)

yourAnswerToTheQuestion