我想對以下操作執行集成測試。使用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不會讓你發送一個。 –