You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单元测试中模拟Graph API的Microsoft.Graph.ServiceException?

模拟Graph API调用抛出ServiceException的单元测试写法

要在单元测试里模拟Graph API调用抛出Microsoft.Graph.ServiceException,只需要把你原来用ReturnsAsync返回正常结果的逻辑,改成用ThrowsAsync抛出构造好的ServiceException实例就行。

具体实现代码

你可以单独写一个方法来模拟异常场景,也可以在原方法里加分支判断。以下是单独实现的示例:

public static void SetupMockServiceException(Mock<IRequestAdapter> mockRequestAdapter, string value)
{
    // 构造Graph API返回的错误响应对象
    var errorResponse = new ErrorResponse
    {
        Error = new Error
        {
            Code = "InvalidRequest", // 自定义错误码,比如资源不存在用"ResourceNotFound"
            Message = "无效的主机ID",
            Details = new List<ErrorDetail>
            {
                new ErrorDetail { Message = "提供的host%2Did参数格式不正确" }
            }
        }
    };

    // 设置Moq模拟抛出ServiceException
    mockRequestAdapter.Setup(
        adapter => adapter.SendAsync(It.Is<RequestInformation>(
            ri => (string)ri.PathParameters["host%2Did"] == value
        ), Microsoft.Graph.Models.Security.HostReputation.CreateFromDiscriminatorValue, It.IsAny<Dictionary<string, ParsableFactory<IParsable>>>(), It.IsAny<CancellationToken>())
    ).ThrowsAsync(new ServiceException(errorResponse));
}

关键说明

  • 替换核心逻辑:把原来的ReturnsAsync(host)改成ThrowsAsync(new ServiceException(errorResponse)),用抛出异常替代返回正常结果。
  • 自定义错误内容:ErrorResponse和Error对象可以根据测试场景调整,比如模拟权限不足就把Code设为Authorization_RequestDenied,模拟资源不存在设为ResourceNotFound,错误消息也可以对应修改。
  • 保持匹配条件:原代码里对RequestInformation的路径参数判断逻辑可以保留,确保只在特定请求场景下抛出异常。

内容的提问来源于stack exchange,提问作者Punter Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:50:07