Привет, я пытаюсь издеваться над httpclient, очевидно, заставляя его дать мне результат, который мне нужен. Проблема заключается в том, что в моем модульном тесте мне нужно дважды смоделировать httpClient , каждый с разным ответом.
...
...
var httpReq = new HttpRequestMessage(
HttpMethod.Get,
$"{config["MY_TEST_ENDPOINT"]/site1}");
var myContent = await response.Content.ReadAsStringAsync();
var myFirstModel = JsonConvert.DeserializeObject<MyFirstModel>(myContent );
...
...
, который я высмеиваю, может:
...
myMockedHttp
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("[{'id':'0001'," +
"'name':'Jonah'," +
"'street':'Cambridge Street 1234'}]"
)
})
.Verifiable();
Это даст мне ответ, который я могу десериализовать и использовать - предоставив ему объект с 3 членами: id, name и street.
И тут возникает проблема для меня - У меня также в том же модульном тесте есть еще один httpclient-вызов, но я не знаю, как его смутить. Это выглядит так:
...
...
var httpReq = new HttpRequestMessage(
HttpMethod.Get,
$"{config["MY_TEST_ENDPOINT"]/site2}");
var httpResponseMsg = await _httpClient.SendAsync(httpReq);
var myContent = await response.Content.ReadAsStringAsync();
var myFirstModel = JsonConvert.DeserializeObject<MySecondModel>(myContent );
...
...
И изначально - если бы это был единственный httpclient-вызов, я бы высмеял это так:
...
myMockedHttp
.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("[{'id':'34'," +
"'insurance':'Etx'," +
"'insider':'daily'," +
"'collectives':'4'}]"
)
})
.Verifiable();
...
...
Но, очевидно, я не могу ... Дело в том, что я никогда не пробовал эту ситуацию, когда у меня есть несколько httpclient-вызовов, которые нужно смоделировать. Как вы можете видеть, они отвечают разным контентом, поскольку они являются разными объектами и должны обрабатываться таким образом.
У кого-нибудь есть идеи, как это исправить?