如何对 Refit ApiResponse<T> 进行单元测试?
How to unit test the Refit ApiResponse<T>?
我正在使用 refit 来调用 API,响应包含在 ApiResonse<T>
中。我可以模拟 returns 模拟 ApiResponse<T>
的改装调用并断言。一切正常,除了我不确定如何测试 api 调用 returns 异常。
[Get("/customer/{id}")]
Task<ApiResponse<Customer>> GetCustomer(int id);
好像是用了ApiResponse<T>
Refit 把request里面发生的所有exceptions都包装成ApiException
,附加到ApiResponse<T>
。如果使用 Task<T>
,则捕获 ApiException
是调用者的责任。
我用 ApiException.Create()
创建了 ApiException
,但不确定将它放在 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...
消息,只能收到 'Bad Request' 消息。我在改装中对 ApiResponse 进行单元测试吗?任何帮助是极大的赞赏。谢谢
我不知道 Refit,但根据他们的文档,我希望有以下两个选项:
Return 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 正是您所要求的: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);
现在您可以在单元测试中捕获异常。
我正在使用 refit 来调用 API,响应包含在 ApiResonse<T>
中。我可以模拟 returns 模拟 ApiResponse<T>
的改装调用并断言。一切正常,除了我不确定如何测试 api 调用 returns 异常。
[Get("/customer/{id}")]
Task<ApiResponse<Customer>> GetCustomer(int id);
好像是用了ApiResponse<T>
Refit 把request里面发生的所有exceptions都包装成ApiException
,附加到ApiResponse<T>
。如果使用 Task<T>
,则捕获 ApiException
是调用者的责任。
我用 ApiException.Create()
创建了 ApiException
,但不确定将它放在 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...
消息,只能收到 'Bad Request' 消息。我在改装中对 ApiResponse 进行单元测试吗?任何帮助是极大的赞赏。谢谢
我不知道 Refit,但根据他们的文档,我希望有以下两个选项:
Return 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 正是您所要求的: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);
现在您可以在单元测试中捕获异常。