2

非常基本的测试:

[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 会连接。如果没有,则超时。有小费吗?

4

2 回答 2

3

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

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

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

希望这可以帮助。

于 2013-05-18T20:00:32.220 回答
0

你如何托管服务器?我看到你正在使用端口 24144。也许在调试模式下你正在运行 express IIS Web 服务器,这就是端口,但在非调试模式下不是?

于 2013-05-25T19:22:55.217 回答