【问题标题】:Issue Moq'ing HttpResponseMessage发出 Moq'ing HttpResponseMessage
【发布时间】:2018-05-25 07:16:48
【问题描述】:

我有以下方法:

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,因为在这种情况下我只是在模拟所以崩溃。

我怎样才能模拟出来以便我的测试能够工作?

【问题讨论】:

    标签: c# unit-testing nunit moq


    【解决方案1】:

    我发现了我的问题。而不是删除我的问题,我想我会将我的更改发布到测试中。基本上我没有嘲笑内容。

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

    因此,根据您可能希望返回的内容类型,您可能需要更改内容类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 2020-08-10
      相关资源
      最近更新 更多