Как я могу спровоцировать несколько звонков для завершения? - PullRequest
5 голосов
/ 20 января 2011

В недавнем AdaCore Gem есть утверждение

Реализация 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?);но есть ли способ вызвать несколько финализаций без этого изменения в тестируемом программном обеспечении?

1 Ответ

3 голосов
/ 20 января 2011

Для целей тестирования я использую дочерний пакет. Это позволяет тестировать приватную часть. Предполагая, что ваш пакет:

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;
...