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

Mock TableClient.DeleteEntityAsync时如何设置响应StatusCode与Content

配置Mock的Response对象的StatusCode与Content属性

Azure.Response的StatusCode对应类中的抽象属性Status,和Content属性一样,都没有公开可写的setter,无法直接给属性赋值,需要通过Moq框架的属性配置逻辑指定返回值。

常规Moq配置方式

Azure Table服务删除实体成功的标准返回为HTTP 204 No Content,响应无返回体,完整实现代码如下:

using Azure;
using Azure.Data.Tables;
using Moq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;

// 初始化响应Mock实例
var mockResponse = new Mock<Response>();
// 配置状态码为204,代表删除成功
mockResponse.SetupGet(resp => resp.Status).Returns((int)HttpStatusCode.NoContent);
// 配置响应内容为空,匹配204响应无返回内容的特性
mockResponse.SetupGet(resp => resp.Content).Returns(BinaryData.FromString(string.Empty));

// 配置TableClient的DeleteEntityAsync方法Mock逻辑
Mock<TableClient> tableClient = new Mock<TableClient>();
tableClient.Setup(client => client.DeleteEntityAsync(
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<ETag>(),
        It.IsAny<CancellationToken>()))
    .ReturnsAsync(mockResponse.Object);

如果要模拟其他业务场景,比如实体不存在(404)、版本冲突(409),只需要修改Status的返回值为对应HTTP状态码,在Content中填入对应格式的响应内容即可。

简化实现方式

高版本Azure SDK提供了内置的响应构造静态方法,不需要单独Mock Response对象,可以直接生成符合要求的响应实例返回,代码更简洁:

Mock<TableClient> tableClient = new Mock<TableClient>();
tableClient.Setup(client => client.DeleteEntityAsync(
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<ETag>(),
        It.IsAny<CancellationToken>()))
    .ReturnsAsync(Response.CompletedWithStatus(
        status: (int)HttpStatusCode.NoContent, 
        content: BinaryData.FromString(string.Empty)));

内容的提问来源于stack exchange,提问作者Markus Meyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:33:25