我想对以下操作执行集成测试。使用web api在请求正文中获取复杂类型参数的请求
我如何可以通过在集成测试我requestDto对象?
无论是GetAsync也不SendAsync方法的过载参数,以定制对象传递到服务器。
[Route("{startDate:datetime}")]
[HttpGet]
public HttpResponseMessage Get(DateTime startDate, [FromBody]LessonplannerGetRequest request)
{
request.StartDate = startDate;
var lessonplannerResponse = _service.GetPeriodsByWeekStartDate(request);
return Request.CreateResponse<LessonplannerResponse>(HttpStatusCode.OK, lessonplannerResponse);
}
[Test]
public void Get_Lessons_By_Date()
{
// Arrange
var request = new HttpRequestMessage(HttpMethod.Get, _server.BaseAddress + "/api/lessonplanner/2014-01-14");
var myRequestDto = new LessonplannerGetRequest();
// Act => QUESTION: HOW do I pass the myRequestDto ???
var response = _client.SendAsync(request, new CancellationToken()).Result;
// Assert
Assert.That(response.StatusCode == HttpStatusCode.OK);
}
UPDATE
正如达雷尔·米勒说:“从技术上说,HTTP,您可以发送一个机构,它只是说身体没有任何意义,不能使用的HttpClient不会放过你的。发一个。“
我在这里发布我的集成测试与HttpClient的做用复合型+ FromBody Get请求:
// Arrange
var request = new HttpRequestMessage(HttpMethod.Get, _server.BaseAddress + "/api/lessonplanner/2014-01-14");
var myRequestDto = new LessonplannerGetRequest{ FirstDayOfWeek = DayOfWeek.Sunday, SchoolyearId = 1, StartDate = DateTime.Today};
request.Content = new ObjectContent<LessonplannerGetRequest>(myRequestDto, new JsonMediaTypeFormatter());
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Act
var response = _client.SendAsync(request, new CancellationToken()).Result;
// Assert
Assert.That(response.StatusCode == HttpStatusCode.OK);
当然是,这是不是在HTTP的方式有些人可能认为这样做differentlly通过FromUri发送复杂类型/请求参数。
如果您正在发出http请求,您应该序列化您的requestDto对象并通过request.body发送它。 – xoail
HTTP语义不允许GET的主体。这样做的HTTP-ish方法越多,就是在URI和查询字符串中传入请求数据,并使用'[FromUri]'绑定到复杂类型。只是一个想法。 – Badri
@Badri技术上HTTP说你可以发送一个body,它只是说body没有任何意义而且不能使用。 HttpClient不会让你发送一个。 –