Gnat 测试的文档展示了如何生成线束和框架单元测试。它为目标项目中的每个公共函数创建一个单元测试,但如果我添加另一个单元测试,那么当我重新生成线束和骨架单元测试时,该单元测试就会被覆盖。
在gnattest 提供的简单示例项目中,如何添加另一个测试?我试过了:
(1) 在已有的测试函数中添加另一个 Assert 行。这可行,但不是好的做法;第一个失败的测试会阻止其他测试的运行。
(2)向obj/gnattest/harness/gnattest.xml添加函数定义然后重新生成测试不起作用;xml 文件在用于创建测试存根之前会重新生成。
(3) 通过以下更改手动将定义添加到测试/和利用/,这些更改会因重新生成测试而受到破坏。
将其添加到 obj/gnattest/tests/simple-test_data-tests.ads:
procedure Test_Inc2_4f8b9f (Gnattest_T : in out Test);
Run Code Online (Sandbox Code Playgroud)
将其添加到 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;
-- …Run Code Online (Sandbox Code Playgroud) 我正在开发一个巨大的代码包(主要是用 ada 编写的),这是一个极其混乱的情况。到目前为止,尚未应用任何单元测试,并且对于所有现有代码,不得实施单元测试。但我们的团队决定,所有新代码都应该与测试一起实现。在 GPS 中,可以让 GNATtest 自动生成项目中所有功能和程序的测试程序。但正如所写,我们必须从自动生成中排除所有旧代码。
有没有办法将函数和过程标记为“需要测试”?
我正在基于 aunit 的现有套件中的 Ada 应用程序中进行单元测试。根据他们的文档和代码,程序:Set_Up_Case 和 Tear_Down_Case 应该只在测试例程集之前运行。但是,当我运行单元测试(特定类或 SmokeTests)时,我发现它们在每次测试之前和之后运行。剥离输出:
2021-07-05 15:05:55 ----- Set_Up_Case -----
2021-07-05 15:05:55 ----- Set_Up -----
2021-07-05 15:05:58 ----- Starting Test AAAA -----
2021-07-05 15:06:07 ----- Tear_Down -----
2021-07-05 15:06:07 ----- Tear_Down_Case -----
2021-07-05 15:06:07 ----- Set_Up_Case -----
2021-07-05 15:06:07 ----- Set_Up -----
2021-07-05 15:06:10 ----- Starting Test BBBB -----
2021-07-05 15:06:34 ----- Tear_Down -----
2021-07-05 15:06:34 ----- Tear_Down_Case -----
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能得到记录的行为呢?
我正在尝试用简单的方法编写测试Ada.Text_IO.Put.为简单起见,这是一个我想测试的组合方法:
procedure Say_Something is
begin
Put("Something.");
end Say_Something;
Run Code Online (Sandbox Code Playgroud)
在我的AUnit测试中,我有:
procedure Test_Put (T : in out Test) is
pragma Unreferenced (T);
use Ada.Text_IO;
Stdout : constant File_Type := Standard_Output;
Put_File_Name : constant String := "say_something_test.txt";
Put_File : File_Type;
Expected : constant String := "Something.";
begin
-- Create the output file and redirect output
Create (Put_File, Append_File, Put_File_Name);
Set_Output (Put_File);
Say_Something;
-- Redirect output to stdout and close the file
Set_Output (Stdout);
Close (Put_File);
-- Read file
declare
File_Size : …Run Code Online (Sandbox Code Playgroud)