bugfix> c# > 投稿

私は次の方法を持っています:

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 件
  • 私は自分の問題を理解しました。質問を削除するのではなく、テストへの変更を投稿すると思いました。基本的に私はコンテンツをcontent笑していませんでした。

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

    したがって、返されるコンテンツタイプに応じて、コンテンツのタイプを変更する必要があります。

あなたの答え