Java メソッドに多数のネストされたループ (3 ~ 4 レベル) があり、これらのループのそれぞれに if-else ブロックを含めることができるとします。これらすべてが正しく機能しているかどうかを確認するにはどうすればよいですか? 不正な値を代用するような力ずくのアプローチを使用する代わりに、これをテストする論理的な方法を探しています。
編集:初心者向けの優れたテストブックも提案できますか?
Java メソッドに多数のネストされたループ (3 ~ 4 レベル) があり、これらのループのそれぞれに if-else ブロックを含めることができるとします。これらすべてが正しく機能しているかどうかを確認するにはどうすればよいですか? 不正な値を代用するような力ずくのアプローチを使用する代わりに、これをテストする論理的な方法を探しています。
編集:初心者向けの優れたテストブックも提案できますか?
私がいつも教えられてきた基本的なテストの方法は、可能な限り特殊なケースを処理することです。
たとえば、変数 i が 0 から 10 の間であるという条件をチェックしている場合、if(i>0 &&i<10)
私が自然にテストするのは、テスト条件を真にするいくつかの値、できればエッジの近く、次にいくつかの組み合わせであるエッジの値です。 true と false、そして最後に範囲外のケースです。前述の条件で、1、5、9、0、10、-1、11 をテストし、最後に正と負の両方の非常に大きな整数をテストします。
この種の「不正な値を代入しない」に反しますが、条件が適切に失敗するようにするためには、そうしなければならないと感じています。
EMMAはコード カバレッジ ツールです。EMMA の下で単体テストを実行すると、到達した行と到達しなかった行を示す色付きのソース コードを含む HTML レポートが生成されます。それに基づいて、テストを追加して、さまざまなブランチをすべてテストしていることを確認できます。
コード内の各 if/then には、ループに入る/再実行するかどうかを決定するためにループで使用される部分式と同様に、ブール部分式が含まれています。述語のカバレッジは、テストがどれほど完全であるかを示す良いアイデアを提供するはずです。
ウィキペディアは述語範囲を説明しています
条件カバレッジ (または述語カバレッジ) - 各ブール部分式が true と false の両方に評価されましたか? これは必ずしも判定カバレッジを意味するものではありません。
たとえば、いくつかの値でこれらの各ループを通過する入力を見つけます。次に、if の各分岐を通過する入力を見つけます。次に、大きな値、小さな値、または不正な値を持つループを通過する入力を見つけます。
入力データと出力データを設定します。計算は自分で行ってください。出力値が個別に計算した値と一致するかどうかを確認するクラスを作成します。
例:
入力: 配列 (3,4,5,6);
出力 (奇数の合計) : 8
class TestClass{
//test case
//here you keep changing the array (extreme values, null etc..
public void test1(){
int[] anArray=new int[4];
anArray[0] = 3;
anArray[1] = 4;
anArray[2] = 5;
anArray[3] = 6;
int s=Calculator.oddSum(x);
if (s==8)
System.out.println("Passed");
else
System.out.println("Failed");
}
public static void main(){
TestClass t=new TestClass();
t.test1();
}
}