非常基本的测试:
[TestClass]
public class ApiClientTest
{
private RestClient _client;
[TestInitialize()]
public virtual void TestInitialize()
{
_client = new RestClient("http://localhost:24144");
_client.CookieContainer = new System.Net.CookieContainer();
}
[TestMethod]
public void ApiClientTestCRUD()
{
// 1. Log out twice. Verify Unauthorized.
var response = LogOut();
response = LogOut();
Assert.AreEqual(response.StatusCode, HttpStatusCode.Unauthorized);
// Error here:
结果消息:Assert.AreEqual 失败。预期:<0>。实际:<未经授权>。
我得到 <0>,这甚至不是我的 WebAPI 返回的东西。
我认为问题出在我对 RestSharp 的使用上,因为如果我调试一次它就会通过,然后后续运行就会通过。有什么线索吗?
需要明确的是 - 当我打开我的解决方案并第一次尝试运行测试时会发生这种情况。我可以通过调试一次来修复它,看着它通过,然后在不调试的情况下运行我想要的。我可以通过关闭 VS 并再次打开解决方案来重现这一点 - 并在不先调试的情况下运行测试。
这是我的 WebAPI 中的 LogOut 方法:
[Authorize]
public HttpResponseMessage LogOut()
{
try
{
if (User.Identity.IsAuthenticated)
{
WebSecurity.Logout();
return Request.CreateResponse(HttpStatusCode.OK, "logged out successfully.");
}
return Request.CreateResponse(HttpStatusCode.Conflict, "already done.");
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
}
更新:
我最终使用 Trace.WriteLine 运行测试:
// 1. Log out twice. Verify Unauthorized.
Trace.WriteLine("ENTERING FIRST LOGOUT");
var response = LogOut();
Trace.WriteLine("Content: " + response.Content);
Trace.WriteLine("ErrorMessage: " + response.ErrorMessage);
Trace.WriteLine("ResponseStatus: " + response.ResponseStatus);
Trace.WriteLine("StatusCode: " + response.StatusCode);
Trace.WriteLine("StatusDescription: " + response.StatusDescription);
response = LogOut();
Trace.WriteLine("COMPLETED LOGOUTS");
Assert.AreEqual(response.StatusCode, HttpStatusCode.Unauthorized);
我发现了以下内容:
ENTERING FIRST LOGOUT
Content:
ErrorMessage: Unable to connect to the remote server
ResponseStatus: Error
StatusCode: 0
StatusDescription:
COMPLETED LOGOUTS
我的解决方案有一个带有此 RestSharp 测试的测试项目,以及一个应该接受这些请求的 WebAPI 项目。如果我调试,RestClient 会连接。如果没有,则超时。有小费吗?