XUnit ASP.Net 核心 WebAPI 测试中 EnsureSuccessStatusCode 和 Assert.Equal(HttpStatusCode.OK, response.StatusCode) 之间的区别
Difference between EnsureSuccessStatusCode and Assert.Equal(HttpStatusCode.OK, response.StatusCode) in XUnit ASP.Net Core WebAPI Tests
我在一本书(ISBN 1838550313、9781838550318 S.315)中读到,他们使用 EnsureSuccessStatusCode() 和 Assert.Equal(HttpStatusCode.OK, 检查 WEB-API 请求。 .) 在一种验证方法中。但是第二次 Assert 调用是否不需要检查 HTTP-Status 是否为 200?有什么区别,最佳做法是什么?
HttpResponseMessage.EnsureSuccessStatusCode
是 implemented like this:
public HttpResponseMessage EnsureSuccessStatusCode()
{
if (!IsSuccessStatusCode)
{
throw new HttpRequestException(…, inner: null, _statusCode);
}
return this;
}
所以它只检查 IsSuccessStatusCode
的值,即 implemented like this:
public bool IsSuccessStatusCode
{
get { return ((int)_statusCode >= 200) && ((int)_statusCode <= 299); }
}
所以一个状态码被认为是成功的,如果它在 [200, 299] 范围内。这符合 HTTP 状态代码的定义。
如果状态码值不是成功码,那么EnsureSuccessStatusCode
方法会抛出异常。所以在请求失败的情况下,这是一种快速停止执行的方法。
断言与 HttpStatusCode.OK
相等检查状态代码是否 恰好 200。这也意味着其他成功的代码将被拒绝。这是否合适取决于您正在测试的API。许多 RESTful API 经常会 return 不同的成功状态代码,具体取决于发生的事情。例如,API 可能 return “201 Created” 表示已创建资源。
如果测试想要明确确保响应具有状态代码“200 OK”,则不需要调用 EnsureSuccessStatusCode
。否则,如果您想接受任何成功的状态代码,只需调用 EnsureSuccessStatusCode
就足以进行测试,因为抛出的异常通常会使测试失败。
我在一本书(ISBN 1838550313、9781838550318 S.315)中读到,他们使用 EnsureSuccessStatusCode() 和 Assert.Equal(HttpStatusCode.OK, 检查 WEB-API 请求。 .) 在一种验证方法中。但是第二次 Assert 调用是否不需要检查 HTTP-Status 是否为 200?有什么区别,最佳做法是什么?
HttpResponseMessage.EnsureSuccessStatusCode
是 implemented like this:
public HttpResponseMessage EnsureSuccessStatusCode()
{
if (!IsSuccessStatusCode)
{
throw new HttpRequestException(…, inner: null, _statusCode);
}
return this;
}
所以它只检查 IsSuccessStatusCode
的值,即 implemented like this:
public bool IsSuccessStatusCode
{
get { return ((int)_statusCode >= 200) && ((int)_statusCode <= 299); }
}
所以一个状态码被认为是成功的,如果它在 [200, 299] 范围内。这符合 HTTP 状态代码的定义。
如果状态码值不是成功码,那么EnsureSuccessStatusCode
方法会抛出异常。所以在请求失败的情况下,这是一种快速停止执行的方法。
断言与 HttpStatusCode.OK
相等检查状态代码是否 恰好 200。这也意味着其他成功的代码将被拒绝。这是否合适取决于您正在测试的API。许多 RESTful API 经常会 return 不同的成功状态代码,具体取决于发生的事情。例如,API 可能 return “201 Created” 表示已创建资源。
如果测试想要明确确保响应具有状态代码“200 OK”,则不需要调用 EnsureSuccessStatusCode
。否则,如果您想接受任何成功的状态代码,只需调用 EnsureSuccessStatusCode
就足以进行测试,因为抛出的异常通常会使测试失败。