[c#] Request.CreateResponse로 ASP.NET WebApi 단위 테스트


Answers

다음과 같이 테스트 가능성을 위해 컨트롤러 객체를 설정할 수 있습니다.

var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/products");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });

controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;

단위 테스트 ASP.NET 웹 API 에 대한 Peter Provost의 포괄적 인 블로그 게시물에서 복사했습니다.

Question

내 ApiController에 대한 몇 가지 단위 테스트를 작성하려고하는데 몇 가지 문제가 있습니다. Request.CreateResponse라는 좋은 확장 메서드가 있는데 응답 생성에 많은 도움이됩니다.

public HttpResponseMessage Post(Product product)
{
  var createdProduct = repo.Add(product);
  return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}

부분 모의 객체를 사용하지 않고 CreateResponse를 모방하거나 "new HttpResponseMessage (...)"를 직접 사용하는 방법이 있습니까?




테스트 클래스에서 컨트롤러 클래스의 인스턴스를 만듭니다. 예 : var customerController= new CustomerController();

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



Links