Issue Moq'ing HttpResponseMessage - PullRequest
       12

Issue Moq'ing HttpResponseMessage

0 голосов
/ 25 мая 2018

У меня есть следующий метод:

public async Task<SecurityRoleDeleteResult> DeleteSecurityRoleByRoleId(int securityRoleId)
{
    string url = $"{_housingDataSecurityConfiguration.HousingDataSecurityWebApiUrl}SecurityRoles/Delete";

    HttpResponseMessage message = _apiClientService.Post(url, securityRoleId);

    if (message.StatusCode == HttpStatusCode.InternalServerError)
    {
        return SecurityRoleDeleteResult.ErrorOccurred;
    }

    int intResult = 0;
    var apiResult = await message.Content.ReadAsStringAsync();
    if (int.TryParse(apiResult, out intResult))
    {
        return (SecurityRoleDeleteResult)intResult;
    }
    else
    {
        return SecurityRoleDeleteResult.ErrorOccurred;
    }
}

Я сейчас пытаюсь написать модульный тест для него и до сих пор:

[Test]
public async Task DeleteSecurityRoleByRoleId()
{
    _mockApiClientService.Setup(a => a.Post(It.IsAny<string>(), It.IsAny<int>()))
        .Returns(new HttpResponseMessage {StatusCode = HttpStatusCode.OK});

    SecurityRoleDeleteResult result = await _securityRoleService.DeleteSecurityRoleByRoleId(It.IsAny<int>());

    Assert.AreEqual(SecurityRoleDeleteResult.Success, result);
}

Проблема здесь в том, что когдазапуск теста в методе _securityRoleService.DeleteSecurityRoleByRoleId в точке, в которой я пытаюсь установить var apiResult message.content, имеет значение null, потому что в этом случае я только издеваюсь, поэтому вылетает.

Как я могу так высмеять эточто мой тест будет работать?

1 Ответ

0 голосов
/ 25 мая 2018

Я разобрался в своей проблеме.Вместо того, чтобы удалить мой вопрос, я решил опубликовать свои изменения в тесте.По сути, я не издевался над контентом.

HttpContent content = new StringContent("4");

_mockApiClientService.Setup(a => a.Post(It.IsAny<string>(), It.IsAny<int>()))
    .Returns(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = content });

Так что в зависимости от типа контента, который вы, возможно, захотите вернуть, вам может потребоваться изменить тип контента.

...