2016-04-14 13 views
-1

私のメソッドは(オブジェクト送信者、EventArgs e)パラメータとグローバル変数で正確に動作しているので、C#プログラムで私のcalcをテストする方法はわかりません。このメソッドのテストはどのように見えるでしょうか?Voidメソッドのオブジェクトとイベントのパラメータのパラメータ

これは、あなたが計算ロジックをテスト可能にしたい場合は、あなたのコードをリファクタリングする必要があるコード

private void buttonEq_Click(object sender, EventArgs e) 
{ 

    number2 = int.Parse(textBox1.Text); 

    if (operation == "plus") 
    { 
     finRes = number1 + number2; 
    } 
    else if (operation == "minus") 
    { 
     finRes = number1 - number2; 
    } 
    else if (operation == "multiple") 
    { 
     finRes = number1 * number2; 
    } 
    else if (operation == "divide") 
    { 
     finRes = number1/number2; 
    } 
    else if (operation == "exp") 
    { 
     finRes = Math.Pow(number1, number2); 
    } 
    else if (operation == "fac") 
    { 
     int result = number1; 

     for (int i = (number1)-1; i > 0 ; i--) 
     { 
      result = result * i;  
      finRes = result; 
     } 
    } 
    else if (operation == "sqrt") 
    { 
     finRes = Math.Sqrt(number1); 
    } 

    textBox2.Text = finRes.ToString(); 
    operation = ""; 
} 
+0

checkout mvvmパターン。 textBox2.Textにアクセスするために単体テストを書くことはできません。しかし、それをviewmodelのプロパティにバインドすると、そのユニットテストを確実に書くことができます – CarbineCoder

+0

そのコードのほとんどは実際にはインターフェイスを必要としません。 2つの部分に分割するのはどうですか? UIコードは、UIとの間でデータをやりとりすることを処理し、次に、他のものが実際の作業を処理することができます。これにより、すべてのテキストボックスの内容を設定することなく、実際の作業セクションでさまざまなテストを行うことができます。 – MBentley

+0

抽象的なあなた自身のクラスとユニットテストにコードを処理します。次に、フォームクラス内でそのクラスとそのメソッドを使用します。 – Brody

答えて

2

の一部でしかありません。より単純な言葉では、それらのすべてを/別の方法で別の方法に取り除くことを意味します。これで、Calculateメソッドをテストしたり、イベントハンドラから呼び出すことができます。

void Calculate(int num1, int num2) 
{ 
    // put all your if/else logic here 
} 

void buttonEq_Click(object sender, EventArgs e) 
{ 
    Calculate(number1, number2); 
} 
関連する問題