非常基本的测试:
[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连接。如果没有,它会超时。有什么提示吗?
答案 0 :(得分:3)
当调试无法解决问题时,请采用旧时尚方式。
添加Trace.WriteLine(甚至将文本追加到C:\ temp.txt文件中)。
在LogOut方法中每次返回之前写一些字符串,然后尝试编写更多信息(如果是最后一次返回则写入Exception消息,如果是第二次返回则写入身份信息。
希望这有帮助。
答案 1 :(得分:0)
你是如何托管服务器的?我看到你正在使用端口24144.也许在调试模式下你运行的是快速的IIS Web服务器,那是端口,但是在非调试模式下它不是吗?