Loc*_*bug 2 xunit asp.net-core
我在一本书(ISBN 1838550313、9781838550318 S.315)中读到,他们在一个验证方法中使用 EnsureSuccessStatusCode() 和 Assert.Equal(HttpStatusCode.OK, ..) 检查 WEB-API 请求。但是第二个 Assert 调用不需要检查 HTTP-Status 是否为 200 吗?有什么区别以及最佳实践是什么?
HttpResponseMessage.EnsureSuccessStatusCode是这样实现的:
public HttpResponseMessage EnsureSuccessStatusCode()\n{\n if (!IsSuccessStatusCode)\n {\n throw new HttpRequestException(\xe2\x80\xa6, inner: null, _statusCode);\n }\n \n return this;\n}\nRun Code Online (Sandbox Code Playgroud)\nIsSuccessStatusCode所以它只是检查其实现的值,如下所示:
public bool IsSuccessStatusCode\n{\n get { return ((int)_statusCode >= 200) && ((int)_statusCode <= 299); }\n}\nRun Code Online (Sandbox Code Playgroud)\n因此,如果状态代码在 [200, 299] 范围内,则认为它是成功的。这与 HTTP 状态代码的定义相匹配。
\n如果状态代码值不是成功代码,则该EnsureSuccessStatusCode方法将引发异常。因此,这是在请求失败的情况下停止执行的快速方法。
HttpStatusCode.OK通过检查状态代码是否恰好为200来断言相等。这也意味着其他成功的代码将被拒绝。这是否合适取决于您正在测试的 API。许多 RESTful API 通常会根据发生的情况返回不同的成功状态代码。例如,API 可能返回 \xe2\x80\x9c201 Created\xe2\x80\x9d 来表示资源已创建。
如果测试想要显式确保响应的状态码为 \xe2\x80\x9c200 OK\xe2\x80\x9d,则EnsureSuccessStatusCode不需要调用。否则,如果您想接受任何成功的状态代码,只需调用EnsureSuccessStatusCode就足以进行测试,因为抛出的异常通常会使测试失败。
| 归档时间: |
|
| 查看次数: |
2172 次 |
| 最近记录: |