2016-05-29 6 views
-2

例のコードはコード化されたUIテストは、私は別の入力と200のテストケースを持っている私は、デスクトップアプリケーションを使用している世代

パラメータ今の問題は、私は別の入力と一人ひとりのテストケースを記録していますたびに

をパラメータであります

コードをコピーしてパラメータを変更して、すべてのテストケースでコードが同じになるようにする方法はありますか

+0

私は誰がコード化された質問に投票しているのかを知りたいと思っています。 – MPavlak

答えて

1

はここに対処するためのいくつかあります。まず、the link aboveで説明されているように、データ駆動型アプローチを使用してテストを実行できます。

もっと重要なのは、とにかく、あなたはデータ駆動型であり、何を正確にテストしていますか?

テストを書くときは、再利用可能なコードをテストすることが重要です。私はCode First ScaffoldingまたはCoded UI Page Modeling(私はページモデリングのものを書いた)のようなものを見ることをお勧めします。これらのアプローチでは、テストコードははるかに保守性と柔軟性があります(手動で変更するのが簡単です)。これにより、非常に簡単なデータ駆動テストが可能になります。

public void WhenPerformingCalculation_ThenResultIsCorrect() { 
    // imagine calculator with two numbers and a sign 
    var testResult = 
    modelUnderTest.LeftSideNumber.SetValue(3) // set first number 
        .Operator.SetValue("*") // set sign 
        .RightSideNumber.SetValue(10) // set right number 
        .Evaluate.Click() // press evaluate button 
        .Result; // get the result 
    Assert.AreEqual(testResult, 30); 
} 

第二
public class CalculationParameters 
{ 
    public double LeftNumber {get;set;} 
    public string Operator {get;set;} 
    public double RightNumber {get;set;} 
    public double Result {get;set;} 
    public override string ToString(){ return $"{LeftNumber} {Operator} {RightNumber} = {Result}"; } 
} 

public void WhenPerformingCalculation_ThenResultIsCorrect() { 
    ICollection<CalculationParameters> parameters = getParameters(); 

    List<Exception> exceptions = new List<Exception>(); 
    foreach(CalculationParameters parameter in parameters) 
    { 
     try 
     { 
      var testResult = 
      modelUnderTest.LeftSideNumber.SetValue(parameter.LeftNumber) // set first number 
          .Operator.SetValue(parameter.Operator) // set sign 
          .RightSideNumber.SetValue(parameter.RightNumber) // set right number 
          .Evaluate.Click() // press evaluate button 
          .Result; // get the result 
      Assert.AreEqual(testResult, parameter.Result); 
     } 
     catch (Exception e) 
     { 
      exceptions.Add(new Exception($"Failed for parameters: {parameter}", e)); 
     } 
    } 
    if(exceptions.Any()){ 
     throw new AggregateException(exceptions); 
    } 
} 

なり、なぜあなたは、与えられたテストでは、入力/出力のように多くの組み合わせをテストする必要がありますか? 「ログインページで無効な資格情報を入力すると、警告がユーザーに提供されます」などのテストを行っている場合。何個の無効な入力を実際にテストする必要がありますか?有効な資格情報の2番目のテストがあり、データ駆動は必要ありません。

私はあなたがあなたのUIの単体テストであるべきものをテストしていないことに注意してください。さまざまな入力の組み合わせをテストして、UIが正しい出力を生成しているかどうかを確認しているように思えます。これはおそらく基礎となるシステムの単体テストであるはずです。 UIをテストするときは、通常、ビューモデルへのバインディングが正しいことをテストし、計算や他のサーバーロジックが正確に実行されているかどうかをテストするだけで十分です。

私が提供している例では、計算機がクライアント側(サーバ側の検証や計算に関する論理)が存在しない限り、クライアント側をテストしません。その場合でも、私はこのテストを行うためにコード化UIを使用する代わりに、私の電卓に電力を供給するビューモデルをテストするためのjavascriptテストランナーを取得するでしょう。

テストしている入出力の組み合わせの例を提供できますか?

0

コマンドラインを使用してアプリケーションにイベント引数を使用できますバッチスクリプト、または要求されたパラメータを渡す関数を作成することができます。 メインヘッダーでは、 main(文字列eventargs [])を使用できます。文字列変数は、コマンドラインからイベント引数になります

関連する問題