2016-04-12 6 views
1

詳細については、IE、Mozilla、およびChromeの3つのフレームワーク(UI刺激用のSeleniumを使用)に重複してテストする一連のテストがあります。第1の解決策は、テストを別個のテストクラスで複製することであった。すなわち、各テストクラスは、コンストラクタ内で異なるフレームワークを有する同じ20のテストケースを有していた。第2の解決策は、入力として、各フレームワークのタイプとパラメータ化入力(またはxUnitの理論)を使用することであった。複数のフレームワーク(インターネットブラウザ)で自動化された統合テストを重複することなくどのように使用できますか?

/// <summary> 
    /// The non-default constructor that initializes 
    /// necessary instances of objects that are being used 
    /// </summary> 
    public VerifyViewUsingChrome() { 
     _testBases = new Dictionary<FunctionalTestBase.DriverType, TestBase>(); 
     _testBases.Add(FunctionalTestBase.DriverType.Chrome, new TestBase(FunctionalTestBase.DriverType.Chrome)); 
     _testBases.Add(FunctionalTestBase.DriverType.IE, new TestBase(FunctionalTestBase.DriverType.IE)); 
     _testBases.Add(FunctionalTestBase.DriverType.FireFox, new TestBase(FunctionalTestBase.DriverType.FireFox)); 
    } 


    /// <summary> 
    /// Our simple country display test. 
    /// </summary> 
    [InlineData(FunctionalTestBase.DriverType.Chrome)] 
    [InlineData(FunctionalTestBase.DriverType.FireFox)] 
    [InlineData(FunctionalTestBase.DriverType.IE)] 
    [Theory] 
    public void TestADisplayedForACountry(FunctionalTestBase.DriverType testBase) { 
     _testBases[testBase].TestADisplayedForACountry(); 
    } 

この実装の問題は、すべての3つの実装は、いくつかを必要とする各試験のために実行しなければならないことですオーバーヘッド。理想的には、私たちはすべてのIEテストを実行し、その後Firefoxフレームワークを構築し、それらのテストを実行してからChromeを続行します。

テストフレームワークを使用することはできないかもしれませんが、私たちはビルドサーバーとの結びつきが便利なので、テストフォーマットを維持することが理想的です。

+1

あなたはSeleniumを使用していますか? – trailmax

+0

はい。それがUIを刺激する方法です。 –

+1

これはおそらく質問またはタグに記載されているはずです。しかし、今は汗がない - あなたはあなたに合った解決策を見つけました。 – trailmax

答えて

1

解決策が私が思っていたよりも簡単だったことがわかりました。コンストラクタはすべてのテストの前に呼び出されるので、テストの実行方法に関係なく、フレームワークの起動と破棄が行われます(前のテストの結果から逃げたくないので意味があります)。ここで

は、私たちがやることにしたものです:

/// <summary> 
    /// The non-default constructor that initializes 
    /// necessary instances of objects that are being used 
    /// </summary> 
    public VerifyViewUsing() { } 


    /// <summary> 
    /// Our simple country display test. 
    /// </summary> 
    [InlineData(FunctionalTestBase.DriverType.Chrome)] 
    [InlineData(FunctionalTestBase.DriverType.FireFox)] 
    [InlineData(FunctionalTestBase.DriverType.IE)] 
    [Theory] 
    public void TestADisplayedForACountry(FunctionalTestBase.DriverType testBaseType) { 
     TestBase testBase = new TestBase(testBaseType); 
     testBase.TestADisplayedForACountry(); 
    } 

この機能はかなり正確に、我々はそれが望んでいましたか。各テストは独立しており、フレームワーク間で複製され、使用されたフレームワークにリンクされた結果で実行されます。

編集:実際のより良い方法は、これを次のようになります。これは、あなたのフレームワーク1つの時間を定義し、プロジェクト全体でそれらを使用することができます

public static IEnumerable<object[]> DriverTypes { 
     get { 
      // Or this could read from a file. :) 
      return new[] 
      { 
       new object[] { FunctionalTestBase.DriverType.Chrome }, 
       new object[] { FunctionalTestBase.DriverType.IE}, 
       new object[] { FunctionalTestBase.DriverType.FireFox} 
      }; 
     } 
    } 
    /// <summary> 
    /// Verifies that Brucellosis is displayed in the Disease List for 
    /// Zimbabwe 
    /// </summary> 
    [Theory, MemberData("DriverTypes")] 
    public void TestClickingADiseaseLinkDisplaysACreatePage(FunctionalTestBase.DriverType testBaseType) { 
     TestBase testBase = new TestBase(testBaseType); 
     testBase.TestClickingADiseaseLinkDisplaysACreatePage(); 
    } 

関連する問題