1

WatiN を使用してテストを作成しました。F10 を使用してコードをステップ実行すると、テストは成功しますが、コンテキスト メニューから [テストの実行] コマンドを実行すると、テストが失敗します。

これが私のテストです:

[TestMethod]
[STAThread]
public void Should_show_captcha_after_three_invalid_login_attempts_with_invalid_username()
{
    // Given
    int numberOfLoginAttempts = 3;

    // When
    for (int loginAttempt = 1; loginAttempt <= numberOfLoginAttempts; loginAttempt++)
    {
        EnterUsername(LoginSettings.ValidUserName);
        EnterPassword(loginAttempt.ToString());

        ClickLoginButton();

        // Check we are still on the loginpage
        Assert.IsTrue(_browser.Title.Contains("Inloggen"));
    }

    bool isCaptchaVisible = _browser.Page<LoginPage>().Captcha.Exists;

    // Then
    Assert.IsTrue(isCaptchaVisible);

    // Make sure to clear the login attempts for next test cases
    RemoveLoginAttempts();
}

参考までに: DB では、ユーザー名に基づいて loginAttempts を追跡します。ログイン試行回数が 2 回を超えると、キャプチャが表示されます。私が遭遇した問題は、DB のカウンターが 1 のままであることです。手動でテストを実行すると、カウンターが増加します。

これはどのように可能ですか?

4

1 に答える 1

2

そうですね、タイミングが必要です。ただし、問題の一部は、これが単体テストではないことです。もう 1 つは、それを前提として記述された別のテスト コード行を実行する前に、完了していると想定している大量の非同期処理が行われていることです。もっている。

たとえば、ログイン試行のループ内のカウントは、データベース内のカウントではありません。すべてが等しい場合、一致するはずですが..

したがって、ログイン機能をテストする必要があります。失敗した場合はデータベースの列にログインし、成功した場合はそのカウントをリセットします。次に、データベースでのログイン試行が制限を超えたときに、ログイン応答がそれを検出し、正しい応答を表示することを確認する別のテスト。

エンドツーエンド/ホワイトボックス テストのためにこれらすべてを結合したい場合。次に、何らかの説明の自動化テストを使用する必要があります。

Windows、ブラウザー、Web サーバー、または dbms でさえ、最初のログイン試行の処理を完了する時間がなく、さらに 2 回キューに入れ、テストを実行したのではないかと思います。デバッグモードでは、ステップスルーするまでに十分な時間があります。

于 2012-10-03T11:20:37.700 に答える