5

最近のAdaCoreGemには、次のような声明があります。

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);(またはMy_T.Finalize?); しかし、テスト対象のソフトウェアにこの変更を加えることなく、複数のファイナライズを引き起こす方法はありますか?

4

1 に答える 1

3

テストの目的で、私は子パッケージを使用します。プライベート部分をテストすることができます。パッケージが次のようになっていると仮定します。

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;
于 2011-01-20T12:57:51.397 に答える