unit-testing
ループのユニットテスト(Java)
サーチ…
前書き
ループは、どのプログラミング言語でも重要な制御構造の1つと考えられています。ループカバレッジを達成するにはさまざまな方法があります。
これらのメソッドは、ループのタイプによって異なります。
単一ループ
ネストループ
連結ループ
シングルループテスト
これらは、ループ本体に他のループ(入れ子の場合は最も内側のループ)が含まれていないループです。
ループカバレッジを得るために、テスターは以下のテストを実施する必要があります。
テスト1:ループ本体をまったく実行すべきでないテストを設計する(すなわち、ゼロ回の反復)
テスト2:ループ制御変数が負であるテストを設計する(負の反復回数)
テスト3:ループが1回だけ繰り返すテストを設計する
テスト4:ループを2回反復するテストを設計する
テスト5:ループが特定の回数反復するテストを設計します。たとえば、m <m <最大反復回数
テスト6:ループが最大反復数より1つ少ない回数で反復するテストを設計する
テスト7:ループが最大反復回数を反復するテストを設計する
テスト8:ループが最大反復回数の1つを反復するテストを設計する
指定されたすべての条件が適用される以下のコード例を検討してください。
パブリッククラスSimpleLoopTest {
private int [] numbers = {5、-77,8、-11,4,1、-20,6,2,10};
/** Compute total of positive numbers in the array
* @param numItems number of items to total.
*/
public int findSum(int numItems)
{
int total = 0;
if (numItems <= 10)
{
for (int count=0; count < numItems; count = count + 1)
{
if (numbers[count] > 0)
{
total = total + numbers[count];
}
}
}
return total;
}
}
パブリッククラスTestPassはTestCase {
public void testname() throws Exception {
SimpleLoopTest s = new SimpleLoopTest();
assertEquals(0, s.findSum(0)); //Test 1
assertEquals(0, s.findSum(-1)); //Test 2
assertEquals(5, s.findSum(1)); //Test 3
assertEquals(5, s.findSum(2)); //Test 4
assertEquals(17, s.findSum(5)); //Test 5
assertEquals(26, s.findSum(9)); //Test 6
assertEquals(36, s.findSum(10)); //Test 7
assertEquals(0, s.findSum(11)); //Test 8
}
}
ネストループテスト
ネストされたループは、ループ内のループです。
外部ループは、内部ループが完全に終了/中断した後にのみ変化します。
この場合、テストケースは次のように設計する必要があります。
最も内側のループから開始します。すべての外側ループを最小値に設定します。最も内側のループ(Test3 / Test4 / Test5 / Test6 / Test7)で簡単なループテストを実行します。すべてのループがテストされるまで続行する
連結ループテスト
2つのループは、入口から出口まで同じ経路で他のループを出た後に到達することが可能な場合に連結されます。これらの2つのループは、互いに独立していることがあります。そのような場合は、単一ループテストの一部として指定された設計手法を適用することができます。
しかし、あるループ内の反復値が他のループの反復値に直接的または間接的に関連し、それらが同じパス上で発生する可能性がある場合、それらをネストループと見なすことができます。