4

私の質問は、私のセットアップが現在、UI 受け入れテストを使用した BDD に関するベスト プラクティス アプローチに従っているかどうかに焦点を当てています。私は SpecFlow で WatiN を使用して UI 受け入れテストを作成し、アプリケーションを AppHarbor (.Net アプリケーションのサービスとしてのクラウド プラットフォーム) にデプロイしています。AppHarbor は、デプロイ時にユニット/統合テストを実行し、テストに合格した場合にのみサイトを公開します。そのため、最初に次のように基本的な失敗テストを作成することから始めました。

Scenario: Navigation to homepage
          When I navigate to /
          Then I should be on the application homepage

このテストに関連する手順では、WatiN を使用してブラウザーを開き、ビューのタイトル属性が "Welcome" に設定されていることを確認します。WatiN ブラウザーでテストする URL を決定するために環境をチェックしています。たとえば、開発中の場合は、ホームとして「http://localhost:49641/」に移動します。それ以外の場合は、「http://myappharborapp.com/」に移動します。

私の問題は、このアプリケーションを初めて展開する場合、ページまたはビューが実際には存在しないため、テストが失敗することです (サイトがまだ公開されていないため)。たとえば、後で「About」ページビューを追加し、失敗するテストを最初に書いた場合、これも失敗します。更新をプッシュすると、「About」ページがまだ存在しないため、テストは失敗します。

私の質問は次のとおりです。UI テストをどのように設定するかに関して、ベスト プラクティスに従っていませんか? どのような環境でも合格するために、これらのテストをどのように設定する必要がありますか?

どんな洞察も大歓迎です!

4

1 に答える 1

3

「従来の」watin テストでは、カスタム属性を使用して、アプリケーションのバージョンと実行中の環境を指定します。基準が満たされない場合、テストはスキップされます。

(コードはhttp://testingstax.codeplex.comの parkcalc サンプル > オブザーバー > 環境モニターのオープン ソースです)

    internal static void CheckSetEnvironment()
    {
        Object[] attributes = Utility.GetCallerAttributes(typeof(ExecutionEnvironment), 3);

        CheckEnvironment(attributes);
    }

    private static void CheckEnvironment(Object[] attributes)
    {
        TestEnvironment = GetCurrentEnvironment();

        if (attributes.Length > 0 && !attributes.Contains(new ExecutionEnvironment(TestEnvironment)))
        {
            Assert.Inconclusive("This test is not designed to be executed in the '" + TestEnvironment.ToString() + "' environment.");   
        }
    }

    private static EnvironmentType GetCurrentEnvironment()
    {
        string currentEnvironment = ConfigurationManager.AppSettings["Environment"].ToLower(CultureInfo.CurrentCulture);
        EnvironmentType Environment = new EnvironmentType();

        try
        {
            Environment = (EnvironmentType)Enum.Parse(typeof(EnvironmentType), currentEnvironment, true);
        }
        catch (System.ArgumentException)
        {
            Assert.Fail(" The current environment setting in 'Environment' in the app.config is invalid.");
        }
        return Environment;
    }

トリックは、specflow アクションをマップしてテストを無視することです。

「テストが本番環境で実行されていないことを考えると」または同様のもの

于 2011-02-02T22:51:31.540 に答える