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

RestSharp 110.2.0单元测试:ExecuteAsync返回Data为Null问题

RestSharp 110.2.0 单元测试中 response.Data 为空的问题

业务代码

我有一个使用RestSharp 110.2.0的GetToken方法,代码如下:

private IRestClient _restClient;

public async Task<string> GetToken()
{
    var pw = await _vault.GetValue("pw");
    var un = await _vault.GetValue("un");
    
    var request = new RestRequest(new Uri("login"));
    request.AddJsonBody(new 
    {
        Username = un,
        Password = pw
    });
    
    var response = await _restClient.ExecutePostAsync<string>(request);
    return response.Data;
}

初始单元测试代码

我编写的单元测试代码如下:

private AutoMocker _mocker;

[Fact]
public async Task SomeTest()
{
    _mocker.GetMock<IRestClient>()
        .Setup(m => m.ExecuteAsync(It.Is<RestRequest>(r => r.Resource == "login"), It.IsAny<CancellationToken>()))
        .ReturnsAsync(new RestResponse
            {
                StatusCode = HttpStatusCode.OK, 
                ResponseStatus = ResponseStatus.Completed,
                IsSuccessStatusCode = true,
                Content = "authToken",
            });
            
    var result = await _uut.GetToken();
    
    Assert.Equal("authToken", result);
}

问题排查与尝试的解决步骤

  1. 空引用异常解决:运行初始测试时出现空引用异常,通过模拟IRestClient的Serializers属性解决了该问题,修改后的测试片段如下:
[Fact]
public async Task SomeTest()
{
    var serializerConfig = new SerializerConfig();
    serializerConfig.UseDefaultSerializers();
    
    _mocker.GetMock<IRestClient>()
        .Setup(m => m.Serializers)
        .Returns(new RestSerializers(serializerConfig));
    
    // 其余测试代码保持不变
}
  1. response.Data 为空的问题:空引用问题解决后,发现response.Data始终为null,虽然Content字段能看到预期的"authToken"值,但Data字段始终没有值。我尝试了以下方案均无效:
    • 直接构造泛型RestResponse<string>并手动设置Data属性:
      .ReturnsAsync(new RestResponse<string>(new RestRequest())
      {
          StatusCode = HttpStatusCode.OK, 
          ResponseStatus = ResponseStatus.Completed,
          IsSuccessStatusCode = true,
          Content = "authToken",
          Data = "authToken"
      });
      
    • 在响应中添加ContentType = "application/json; charset=utf-8"配置

当前困境

我了解RestSharp官方文档中推荐的单元测试方案,但该方案目前对我来说不切实际,需要找到其他可行的解决办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:35:17