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の使用にあると思います.1回デバッグすると成功し、その後の実行は成功するからです。何が起こっているのか手がかりはありますか?

明確にするために-これは、ソリューションを開いて初めてテストを実行しようとしたときに発生します。一度デバッグして、それが通過するのを見てから、必要なだけデバッグせずに実行することで修正できます。これを再現するには、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 メソッドですべての戻り値の前に何らかの文字列を書き込んでから、さらに情報を書き込んでみてください (最後の戻り値の場合は例外メッセージを書き込み、2 回目の戻り値の場合は ID 情報を書き込みます。

お役に立てれば。

于 2013-05-18T20:00:32.220 に答える
0

サーバーをどのようにホストしていますか? ポート 24144 を使用していることがわかりました。おそらく、デバッグ モードでは高速 IIS Web サーバーを実行しており、それがポートですが、非デバッグ モードではそうではありませんか?

于 2013-05-25T19:22:55.217 に答える