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 回答