Gnatテストのドキュメントには、ハーネスとスケルトンの単体テストを生成する方法が示されています。ターゲット プロジェクトのパブリック関数ごとに 1 つの単体テストが作成されますが、別の単体テストを追加すると、ハーネスとスケルトンの単体テストを再生成するときに上書きされます。
gnattest で提供される簡単なサンプルプロジェクトでは、別のテストを追加するにはどうすればよいですか? 私はもう試した:
(1) 既に存在するテスト関数に別の Assert 行を追加します。これは機能しますが、良い習慣ではありません。最初に失敗したテストは、他のテストの実行を妨げます。
(2) 関数定義を obj/gnattest/harness/gnattest.xml に追加してからテストを再生成しても機能しません。xml ファイルは、テスト スタブの作成に使用される前に再生成されます。
(3) 以下の変更により、手動で tests/ およびハーネス/ に定義を追加します。これは、テストを再生成することによって破壊されます。
これを obj/gnattest/tests/simple-test_data-tests.ads に追加します。
procedure Test_Inc2_4f8b9f (Gnattest_T : in out Test);
これを obj/gnattest/tests/simple-test_data-tests.adb に追加します。
-- begin read only
procedure Test_Inc2 (Gnattest_T : in out Test);
procedure Test_Inc2_4f8b9f (Gnattest_T : in out Test) renames Test_Inc2;
-- id:2.2/4f8b9f38b0ce8c74/Inc/1/0/
procedure Test_Inc2 (Gnattest_T : in out Test) is
-- simple.ads:7:4:Inc
-- end read only
begin
Assert (Inc(2) = 2, "this test should fail");
-- begin read only
end Test_Inc2;
-- end read only
宣言を 16 行目に追加し、create と add_test を obj/gnattest/harness/simple-test_data-tests-suite.adb の Suite 関数に追加します。
Case_1_1_Test_Inc2_4f8b9f : aliased Runner_1.Test_Case;
Runner_1.Create
(Case_1_1_Test_Inc2_4f8b9f,
"simple2.ads:7:4:",
Test_Inc2_4f8b9f'Access);
Result.Add_Test (Case_1_1_Test_Inc2_4f8b9f'Access);
再コンパイルするには、Makefile を使用しないでください。変更が上書きされます。代わりに、実行します
gprbuild -Pobj/gnattest/harness/test_driver.gpr
./obj/gnattest/harness/test_runner.exe`.
もっと良い方法があるはずです。