Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set api version related data to httpcontext for unit testing in .net core?

I have the following method in my controller

        private string GetPathBase()
        {
            return _configuration["ApiPathBase"] + $"/v{_httpContext.GetRequestedApiVersion().MajorVersion}";
        }

I am not able to mock _httpContext.GetRquestedApiVersion method using moq, as it is an extension method. How can I fill httpContext with test version details, so that the original GetRequestedApiVersion method works?

like image 541
Vikram Babu Nagineni Avatar asked Sep 06 '25 03:09

Vikram Babu Nagineni


1 Answers

            var controllerContextMock = new Mock<ControllerContext>();

            var query = new Mock<IQueryCollection>();
            var request = new Mock<HttpRequest>();
            var httpContext = new Mock<HttpContext>();

            var response = new Mock<HttpResponse>();

            query.SetupGet(q => q["api-version"]).Returns(new StringValues("42.0"));
            request.SetupGet(r => r.Query).Returns(query.Object);                
            httpContext.SetupGet(c => c.Request).Returns(request.Object);
            httpContext.SetupGet(c => c.Response).Returns(response.Object);
            httpContext.SetupProperty(c => c.Items, new Dictionary<object, object>());
            httpContext.SetupProperty(c => c.RequestServices, Mock.Of<IServiceProvider>());

            controllerContextMock.Object.HttpContext = httpContext.Object;
like image 133
Vikram Babu Nagineni Avatar answered Sep 07 '25 21:09

Vikram Babu Nagineni