RestSharp - 当测试第一次运行时,它会失败。当我调试时,它通过了。这是怎么回事?

时间:2013-05-16 18:46:16

标签: asp.net-web-api restsharp

非常基本的测试:

[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连接。如果没有,它会超时。有什么提示吗?

2 个答案:

答案 0 :(得分:3)

当调试无法解决问题时,请采用旧时尚方式。

添加Trace.WriteLine(甚至将文本追加到C:\ temp.txt文件中)。

在LogOut方法中每次返回之前写一些字符串,然后尝试编写更多信息(如果是最后一次返回则写入Exception消息,如果是第二次返回则写入身份信息。

希望这有帮助。

答案 1 :(得分:0)

你是如何托管服务器的?我看到你正在使用端口24144.也许在调试模式下你运行的是快速的IIS Web服务器,那是端口,但是在非调试模式下它不是吗?