ASP.NET WebApi unit testing with Request.CreateResponse

asp.net-web-api, c#, httpresponse, mocking, unit-testing

Solution

Another way to solve this is to do the following:

controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, 
                                  new HttpConfiguration());

If you are upgrading to webapi 5.0, then you'll need to change this to:

controller.Request = new HttpRequestMessage();
controller.Request.SetConfiguration(new HttpConfiguration());

The reason why you need to do this is because you have to have `Request` populated on the controller otherwise the extension methods on `Request` won't work. You also have to have an `HttpConfiguration` set on the Request otherwise routing and other parts of the pipeline won't function correctly.

Problem

I am trying to write some unit tests for my ApiController and faced some issues. There is a nice extension method called Request.CreateResponse that helps a lot with generating response. ``` public HttpResponseMessage Post(Product product) { var createdProduct = repo.Add(product); return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct); } ``` Is there any way to mock CreateResponse without using of partial mocks or direct using of "new HttpResponseMessage(...)"?

Original source

Related problems