3

最近書いたAdaコードの単体テストを書き込もうとしていますが、例外が発生することが予想される特定のケースがあります(コードが正しく機能した場合は機能しませんが、この場合はテストのみを行います、コードを記述していません)。テストルーチンで例外を処理すると、その手順でテストを続行する方法がわかりません。

IE(これは非常に例であり、コンパイル可能なコードではありません)

procedure Test_Function is
begin
  from -20 to 20
     Result := SQRT(i);

 if Result = (Expected) then
     print "Passed";
 end_if;

exception:
  print "FAILED";
end Test_Function

私の最初の考えは、実際に呼び出しを実行し、それを介して例外が返される「より深い関数」があるかどうかです。

IE(これは非常に例であり、コンパイル可能なコードではありません)

procedure Test_Function is
begin
  from -20 to 20
     Result := my_SQRT(i);

 if Result = (Expected) then
     print "Passed";
 end_if;

exception:
  print "FAILED";
end Test_Function

function my_SQRT(integer) return Integer is
begin
   return SQRT(i);
exception:
   return -1;
end my_SQRT;

そして理論的には、それが機能することを期待しています。test_functionが実際のテストを実行することが期待される場合、サブ関数を記述し続ける必要はありません。

ラッパー関数を記述してそれを呼び出すのではなく、例外IN Test_Functionをヒットした後、実行を続行する方法はありますか?または、この種のシナリオを処理するためのより簡単でより良い方法はありますか?

*貧弱なコード例で申し訳ありませんが、そうでない場合はコードを書き直しますが、アイデアは明確でなければならないと思います。

4

2 に答える 2

4

ループ内にブロックを追加できます。疑似構文を使用すると、次のようになります。

procedure Test_Function is
begin
  from -20 to 20
    begin
      Result := SQRT(i);

      if Result = (Expected) then
         print "Passed";
      end_if;

    exception:
      print "FAILED";
    end;
  end loop;
end Test_Function
于 2012-10-25T18:29:09.483 に答える
2

AUnitドキュメントの「Assert_Exception」プロシージャとドキュメントを調べることをお勧めします

関連する例は次のとおりです。

      -- Declared at library level:
         procedure Test_Raising_Exception is
         begin
            call_to_the_tested_method (some_args);
         end Test_Raising_Exception;

      -- In test routine:
      procedure My_Routine (...) is
      begin
         Assert_Exception (Test_Raising_Exception'Access, String_Description);
      end;
于 2012-11-04T07:13:42.663 に答える