我正在尝试为我最近编写的一些Ada代码编写一些单元测试,我有一个特殊情况,我希望得到一个异常(如果代码工作正常我不会,但在这种情况下我只是做是测试,而不是编写代码)。如果我在测试例程中处理异常,那么我不知道如何在该过程中继续测试。
即。 (这是一个很好的例子而不是可编译的代码)
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
我的第一个想法是,如果我有一个“更深层的功能”,它实际上是通过该功能进行的,并且通过该功能返回了异常。
即。 (这是一个很好的例子而不是可编译的代码)
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后继续执行,而不是必须编写包装函数并通过它调用? 要么 是否有更简单/更好的方法来处理这种情况?
*对于糟糕的代码示例感到抱歉,但我认为这个想法应该是明确的,如果不是,我会重新编写代码。
答案 0 :(得分: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
答案 1 :(得分:2)
您可能希望查看the AUnit documentation
中的“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;