gpt4 book ai didi

c# - 如何对 Refit ApiResponse 进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 08:05:52 27 4
gpt4 key购买 nike

我使用 refit 来调用 API,响应包含在 ApiResonse<T> 中。我可以模拟返回模拟 ApiResponse<T> 的 refit 调用并断言。一切都按预期工作,只是我不确定如何测试返回异常的 api 调用。

[Get("/customer/{id}")]
Task<ApiResponse<Customer>> GetCustomer(int id);

看起来如果ApiResponse<T>使用 Refit 将请求内部发生的所有异常包装到 ApiException 中并附加到ApiResponse<T> 。如果Task<T>而是使用,捕获 ApiException是调用者的责任。

我创建了ApiExceptionApiException.Create()但不确定将其放在 ApiResponse<T> 中的哪个位置。 Create()的最后一个参数方法是 ApiException 但我创建和设置的异常根本没有显示在 ApiResponse 中,因此无法测试。

var apiResponse = new ApiResponse<Customer>(
new HttpResponseMessage(BadRequest),
null,
null,
await ApiException.Create(,,,Exception("Something bad happened inside the api")
);

我无法获取 Something bad happened...单元测试中的消息,但只是“错误请求”消息。我是否在 retrofit 中对 ApiResponse 进行单元测试?任何帮助是极大的赞赏。谢谢

最佳答案

我不知道 Refit,但根据他们的文档,我期望以下两个选项:

返回ApiResponse<Customer>

让我们看一下您的代码(顺便说一句,这不是正确的 C# - 请提供正确工作的代码):

var apiResponse = new ApiResponse<Customer>(
new HttpResponseMessage(BadRequest),
null,
null,
await ApiException.Create(,,,Exception("Something bad happened inside the api")
);

执行此代码时,Refit 会被指示准确返回您所要求的内容:return HTTP 500有以下内部异常

所以我希望您会在 apiResponse.Error 中发现API 内部发生了一些不好的事情 ,但不会抛出异常。

抛出ApiException

ApiException源自System.Exception ,你可以替换这个

var apiResponse = new ApiResponse<Customer>(
new HttpResponseMessage(BadRequest),
null,
null,
await ApiException.Create(,,,Exception("Something bad happened inside the api")
);

throw await ApiException.Create("Something bad happened inside the api", message, method, response, settings);

现在您可以在单元测试中捕获异常。

关于c# - 如何对 Refit ApiResponse<T> 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72355253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com