Существует специфическая для GNAT прагма или аспект (Ada 2012), если вы не возражаете против изменения объекта тестирования (и потери части переносимости в процессе ...)
Я покажусначала синтаксис для прагмы, остальные примеры будут использовать аспектный синтаксис:
function Foo(Bar : in Integer) return Integer;
pragma Test_Case("Test 1", Robustness);
Тот же пример с синтаксисом аспекта:
function Foo(Bar : in Integer) return Integer
with Test_Case => ("Test 1", Robustness);
Или, если вам нравится именованная ассоциация:
function Foo(Bar : in Integer) return Integer
with Test_Case => (Name => "Test 1", Mode => Robustness);
Это создаст дополнительный код-обертку, а также контрольный пример, который может выглядеть как беспорядок, если вы не укажете Mode => Nominal
(см. Ниже) или любой из двух необязательных параметров, Requires
и Ensures
:
function Foo(Bar : in Integer) return Integer
with Test_Case => (Name => "Test 1",
Mode => Robustness,
Requires => Bar < 10,
Ensures => Foo'Result > 15);
Requires
действует как предварительное условие для конкретного тестового случая, а Ensures
действует как пост-условие для конкретного тестового случая, которое будет проверяться сгенерированным кодом оболочки.Если у вас есть условия Pre
или Post
для объекта тестирования, сгенерированный код также может проверить их, если вы укажете Mode => Nominal
.(они будут игнорироваться при использовании Mode => Robustness
).
function Foo(Bar : in Integer) return Integer
with Pre => Bar > 5,
Post => Foo'Result < 10,
Test_Case => (Name => "Test 1",
Mode => Nominal,
Requires => Bar < 10,
Ensures => Foo'Result > 15);
И, конечно, вы можете добавить более одного Test_Case
:
function Foo(Bar : in Integer) return Integer
with Test_Case => ("Test 1", Robustness),
Test_Case => ("High Bar", Robustness),
Test_Case => ("Low Bar", Robustness),
Test_Case => ("Candy Bar", Robustness);