Я пытаюсь выполнить тестирование тестирующего контроллера, который ловит FlurlHttpException
и вызывает GetResponseJson<TError>()
, чтобы получить сообщение об ошибке в блоке catch. Я попытался высмеять исключение, но свойство Call
не позволяет мне установить Settings
. Когда тестирование устройства выполняется сбой, потому что в настройках нет JsonSerializer. Как настроить этот тест?Модуль тестирования модуля с использованием Flurl GetResponseJson <TError>()
Вот моя текущая попытка, что не работает:
Контроллер
[Route]
public async Task<IHttpActionResult> Post(SomeModel model)
{
try
{
var id = await _serviceClient.Create(model);
return Ok(new { id });
}
catch (FlurlHttpException ex)
{
if (ex.Call.HttpStatus == HttpStatusCode.BadRequest)
return BadRequest(ex.GetResponseJson<BadRequestError>().Message);
throw;
}
}
Unit Test
[TestMethod]
public async Task Post_ServiceClientBadRequest_ShouldReturnBadRequestWithMessage()
{
//Arrange
string errorMessage = "A bad request";
string jsonErrorResponse = JsonConvert.SerializeObject(new BadRequestError { Message = errorMessage });
var badRequestCall = new HttpCall
{
Response = new HttpResponseMessage(HttpStatusCode.BadRequest),
ErrorResponseBody = jsonErrorResponse
//This would work, but Settings has a private set, so I can't
//,Settings = new FlurlHttpSettings { JsonSerializer = new NewtonsoftJsonSerializer(new JsonSerializerSettings()) }
};
_mockServiceClient
.Setup(client => client.create(It.IsAny<SomeModel>()))
.ThrowsAsync(new FlurlHttpException(badRequestCall, "exception", new Exception()));
//Act
var result = await _controller.Post(new SomeModel());
var response = result as BadRequestErrorMessageResult;
//Assert
Assert.IsNotNull(response);
Assert.AreEqual(errorMessage, response.Message);
}
Я думаю '.ReturnsAsync (() => thow new FlurlHttpException (badRequestCall," exception ", new Exception()))' – Nkosi
'ThrowsAsync' работает правильно. Это просто создание того, что 'FlurlHttpException' вручную не позволяет мне заполнять свойство' Settings', что вызывает ошибку. – DerekMT12
О, хорошо, я неправильно понял. продолжит поиск – Nkosi