Request.CreateResponse를 사용한 ASP.NET WebApi 장치 테스트
내 ApiController에 대한 단위 테스트를 작성하려고하는데 몇 가지 문제가 있습니다. Request.CreateResponse라는 멋진 확장 메서드가 응답 생성에 많은 도움이됩니다.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
부분 모의를 사용하지 않고 "new HttpResponseMessage (...)"를 직접 사용하지 않고 CreateResponse를 조롱하는 방법이 있습니까?
이를 해결하는 또 다른 방법은 다음을 수행하는 것입니다.
controller.Request = new HttpRequestMessage();
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());
webapi 5.0으로 업그레이드하는 경우 다음과 같이 변경해야합니다.
controller.Request = new HttpRequestMessage();
controller.Request.SetConfiguration(new HttpConfiguration());
이 작업을 수행해야하는 이유 Request
는 컨트롤러 에서 데이터를 채워야하므로 확장 방법 Request
이 작동하지 않기 때문입니다. 또한 HttpConfiguration
요청에 대한 설정 이 있어야합니다. 그렇지 않으면 라우팅 및 파이프 라인의 다른 부분이 올바르게 작동하지 않습니다.
다음과 같이 테스트 가능하도록 제어기 오브젝트를 설정할 수 있습니다.
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;
Peter Provost의 Unit Testing ASP.NET Web API 에 대한 포괄적 인 블로그 게시물에서 복사했습니다 .
Web API 2의 경우 간단히 추가 할 수 있습니다
controller.Request = new HttpRequestMessage();
controller.Configuration = new HttpConfiguration();
이렇게
[TestMethod]
public void GetReturnsProduct()
{
// Arrange
var controller = new ProductsController(repository);
controller.Request = new HttpRequestMessage();
controller.Configuration = new HttpConfiguration();
// Act
var response = controller.Get(10);
// Assert
Product product;
Assert.IsTrue(response.TryGetContentValue<Product>(out product));
Assert.AreEqual(10, product.Id);
}
컨트롤러에서 요청 및 구성을 설정하는 것이 중요합니다. 그렇지 않으면 ArgumentNullException 또는 InvalidOperationException으로 테스트가 실패합니다.
VB를 사용하는 비슷한 문제가있는 WebAPI 1.
나는 이것이 다음과 같이 간단하게 작동하도록 하이브리드 응답을 관리했습니다.
Dim request As HttpRequestMessage = New HttpRequestMessage()
Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)
누군가에게 도움이 될 수 있도록 게시하십시오.
테스트 클래스에서 컨트롤러 클래스의 인스턴스를 작성하십시오. 예 :var customerController= new CustomerController();
customerController.Request = new HttpRequestMessage();
customerController.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());
참고 URL : https://stackoverflow.com/questions/10868673/asp-net-webapi-unit-testing-with-request-createresponse
'Programing' 카테고리의 다른 글
대기중인 작업을 취소하는 방법? (0) | 2020.06.16 |
---|---|
Java에서 int가 null 일 수 있습니까? (0) | 2020.06.16 |
Visual Studio 2010 SP1에서 CSS 파일이 열리지 않습니까? (0) | 2020.06.16 |
Windows 10 콘솔에서 무한대가 "8"로 인쇄되는 이유는 무엇입니까? (0) | 2020.06.16 |
자바의 최종 대 C ++의 const (0) | 2020.06.16 |