Ada 我如何激发多个电话来完成?

Ada 我如何激发多个电话来完成?,ada,finalize,Ada,Finalize,在最近的一份声明中 Finalize的实现稍微复杂一些:Ada参考手册指出Finalize过程应该始终是幂等的。Ada编译器可以在同一对象上多次调用Finalize,特别是在发生异常时。 我需要测试一个私人控制的类型 type T is private; private type T is new Ada.Finalization.Controlled with ... 我可以更改源以使类型可见地受控 type T is new Ada.Finalization.Contro

在最近的一份声明中

Finalize的实现稍微复杂一些:Ada参考手册指出Finalize过程应该始终是幂等的。Ada编译器可以在同一对象上多次调用Finalize,特别是在发生异常时。 我需要测试一个私人控制的类型

   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
我可以更改源以使类型可见地受控

   type T is new Ada.Finalization.Controlled with private;

然后只需调用
Finalize(My\T)(甚至
我的T.定稿
?);但是,有没有任何方法可以在不更改被测软件的情况下导致多次终结?

为了进行测试,我使用了一个子包。它允许测试私有部分。 假设您的包是:

package A is
   type T is private;
private
   type T is new Ada.Finalization.Controlled with ...
end A;
我会用以下方法进行测试:

package body A.Test is
   procedure Test_Finalize is
       My_T : T;
   begin
       My_T.Finalize;
   end Test_Finalize;
end A.Test;

哇。这件事让我很难堪。我能想到的最好办法是找出是什么(如果有的话)条件导致编译器使用多重定稿技巧,并尝试归纳它。不过,这不适合便携式测试。也许我只需要接受它必须被明显控制。最好是让它可以测试,即使它添加了一些不必要的脚手架。我也发现特殊的子包(有时称为“私生子”)对于单元测试非常有用,因为它们能够从外部获取包的内部。我知道!真正地非常感谢,只是这份工作。