Ada 如何使GnATTest只考虑我的SRC DIR中的代码? < >我需要给GnATTest什么命令才能使它只考虑我的SRC目录中的代码(并且忽略所有子项目,例如艾达驱动程序库)?

Ada 如何使GnATTest只考虑我的SRC DIR中的代码? < >我需要给GnATTest什么命令才能使它只考虑我的SRC目录中的代码(并且忽略所有子项目,例如艾达驱动程序库)?,ada,Ada,我读过,上面说用“test_Case”方面标记我想测试的每个子程序。如果有必要,我会这样做,但我希望gnattest的保护能够自动为新代码添加新的测试用例,这样我就不会错过任何东西 这是我的gpr文件: 带有“c:\Domains\ada\ada\u Drivers\u Library\boards\MicroBit\MicroBit\u zfp.gpr”; 项目演示(project Demo_)项目 对于运行时(“ada”)使用Microbit_Zfp'Runtime(“ada”); 用于目标

我读过,上面说用“test_Case”方面标记我想测试的每个子程序。如果有必要,我会这样做,但我希望gnattest的保护能够自动为新代码添加新的测试用例,这样我就不会错过任何东西

这是我的gpr文件:

带有“c:\Domains\ada\ada\u Drivers\u Library\boards\MicroBit\MicroBit\u zfp.gpr”;
项目演示(project Demo_)项目
对于运行时(“ada”)使用Microbit_Zfp'Runtime(“ada”);
用于目标用途的“arm eabi”;
主要用途(“Main.adb”);
语言使用(“Ada”);
供来源地使用(“src”);
对于Object_Dir,使用“obj”;
对于创建缺少的目录,请使用“True”;
包编译器重命名Microbit_Zfp.Compiler;
包链接器是
对于默认的_开关(“ada”)使用Microbit_Zfp.Linker_开关(“-Wl,--print memory usage”、“-Wl,--gc sections”、“-U gnat_irq_trap”);
末端连接器;
包Ide是
对于程序_主机使用“:1234”;
对于通信协议,使用“远程”;
对于连接工具,使用“pyocd”;
端Ide;
包装证明是
对于验证开关(“Ada”)使用(“-j0”);
最终证明;
包生成器是
对于开关(“ada”)使用(“-j0”和“-s”);
终端生成器;
结束示范项目;
以下是GPS创建的gnattest命令(该命令错误地为ada驱动程序库创建了测试):

更新:2019-12-17:

以下是我运行建议答案时得到的结果:

>c:\GNAT\2019\bin\gnattest -Pdemo_project.gpr --tests-dir=tests

Could not locate exec arm-eabi-gnatls
gprconfig: can't find a toolchain for the following configuration:
gprconfig: language 'ada', target 'arm-eabi', runtime 'zfp-cortex-m0'
microbit_zfp.gpr:61:25: warning: libraries are not supported on this platform

object path not found for runtime zfp-cortex-m0
gnattest: initialization failed
更新:2019-12-17(2):

我通过像这样添加“-testcase only”标志,并在电池包的单个过程中添加一个test_方面,取得了一些进展。以下是我运行的命令:

arm-eabi-gnat test -dd -PC:\Domains\ada\Demo_Project\microbit\demo_project.gpr --tests-dir=C:\Domains\ada\Demo_Project\tests --test-case-only
Gnattest是成功的。我可以在测试的项目视图中看到我的电池包。然而,当我试图通过GPS构建和运行它时,我遇到了这样的麻烦:

gprbuild --target=arm-eabi -d -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr -XADL_BUILD_CHECKS=Enabled -XADL_BUILD=Debug -XTEST_DRIVER_BUILD_MODE=no-config-file C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_runner.adb -largs -Wl,-Map=map.txt
Compile
   [Ada]          test_runner.adb
   [Ada]          gnattest_main_suite.adb
   [Ada]          battery-test_data.adb
   [Ada]          battery-test_data-tests.adb
battery-test_data-tests.adb:40:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
battery-test_data-tests.adb:40:13: warning: this handler can never be entered, and has been removed
battery-test_data-tests.adb:53:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
battery-test_data-tests.adb:53:13: warning: this handler can never be entered, and has been removed
   [Ada]          battery-test_data-tests-suite.adb
   [Ada]          gnattest_generated.ads
Bind
   [gprbind]      test_runner.bexch
   [Ada]          test_runner.ali
Link
   [link]         test_runner.adb
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a(crt0.o): in function `hang':
(.text+0x40): undefined reference to `__stack_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x48): undefined reference to `__data_words'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x4c): undefined reference to `__data_load'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: (.text+0x54): undefined reference to `__bss_words'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a(crt0.o): in function `__vectors':
(.vectors+0x0): undefined reference to `__stack_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a(s-memory.o): in function `__gnat_malloc':
s-memory.adb:(.text.__gnat_malloc+0x40): undefined reference to `__heap_end'
c:/gnat/2019-arm-elf/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/bin/ld.exe: C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a(s-memory.o):(.data.system__memory__top+0x0): undefined reference to `__heap_start'
collect2.exe: error: ld returned 1 exit status
gprbuild: link of test_runner.adb failed
gprbuild: failed command was: c:\gnat\2019-arm-elf\bin\arm-eabi-gcc.exe test_runner.o b__test_runner.o C:\Domains\ada\Demo_Project\microbit\obj\battery.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\gnattest_generated.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data-tests.o C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\battery-test_data-tests-suite.o C:\Domains\
ada\Demo_Project\microbit\obj\gnattest\harness\gnattest_main_suite.o C:\Domains\ada\Ada_Drivers_Library\boards\MicroBit\obj\zfp_lib_Debug\libada_drivers_library.a C:\gnat\2019-arm-elf\arm-eabi\zfp-cortex-m0\lib\aunit\libaunit.a -g -Wl,-Map=map.txt -LC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\ -LC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\ -LC:\gnat\2019-arm-elf\arm-eabi\zfp-cortex-m0\lib\aunit\ -LC:\Domains\ada\Demo_Project\microbit\obj\ -LC:\Domains\ada\Ada_Drive
rs_Library\boards\MicroBit\obj\zfp_lib_Debug\ -LC:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\ -static-libgcc C:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\adalib\libgnat.a -Wl,-LC:\gnat\2019-arm-elf\arm-eabi\lib\gnat\zfp-cortex-m0\/adalib -nostartfiles -nolibc -mlittle-endian -mthumb -msoft-float -mcpu=cortex-m0 -o test_runner
[2019-12-17 10:47:38] process exited with status 4, 100% (174/174), elapsed time: 03.00s
Traceback (most recent call last):
  File "C:\GNAT\2019\share\gps\support\ui\workflows\__init__.py", line 351, in internal_run_as_wf
    r = workflow(*args, **kwargs)
  File "C:\GNAT\2019\share\gps\plug-ins\memory_usage_providers\ld.py", line 242, in async_fetch_memory_usage_data
    visitor.on_memory_usage_data_fetched(regions, sections, modules)
GPS.Unexpected_Exception: unexpected internal exception raised CONSTRAINT_ERROR : Memory_Usage_Views.Memory_Region_Description_Maps.Reference: key not in map
[C:\GNAT\2019\bin\gps.exe]
0x21a541b
0x197c5b5
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7d79bc at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7d8b16 at ???
[C:\GNAT\2019\bin\gps.python27\python27.dll]
0x1e0c3d54
0x1e113eb9
0x1e114778
0x1e117ee2
0x1e119780
0x1e0b5831
0x1e08dae3
0x1e1141cb
0x1e117fbd
0x1e119780
0x1e0b5831
0x1e08dae3
0x1e09bfcf
0x1e08dae3
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e459f at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e55e0 at ???
[C:\GNAT\2019\bin\gps.libgnatcoll_python\libgnatcoll_python.dll]
0xc7e5833 at ???
[C:\GNAT\2019\bin\gps.libgnatcoll\libgnatcoll.dll]
0xc08dbb4 at ???
[C:\GNAT\2019\bin\gps.exe]
0x197ecf7
0x1975d5f
0x10687c2
0x14ba66a
0x145cc61
0x15e0780
0xfcfa72
0x10b4114
0x10b4672
0x10b7893
0x10b7cf7
0xe30b4c
0xe31022
0xe2deaa
[C:\GNAT\2019\bin\gps.libglib-2.0-0\libglib-2.0-0.dll]
g_timeout_dispatch at gmain.c:4545
g_main_context_dispatch at gmain.c:3122
g_main_context_iterate.isra.10 at gmain.c:3808
g_main_context_iteration at gmain.c:3869
[C:\GNAT\2019\bin\gps.libgio-2.0-0\libgio-2.0-0.dll]
g_application_run at gapplication.c:2308
[C:\GNAT\2019\bin\gps.exe]
0x425199
0x2150c58
0x4013f6
0x4014e9
[C:\windows\system32\kernel32.dll]
0x7768556b
[C:\windows\SYSTEM32\ntdll.dll]
0x777e372b

Build error. [workflow stopped]
有三个问题:

  • 自动生成的测试代码想要抛出异常,但我的项目不允许它们
  • 在那之后,我不理解任何输出
  • 我真的不明白探地雷达文件是如何工作的。我肯定有一个神奇的咒语,我可以在那里键入,并得到解决,但我已经在谷歌搜索和尝试了一整天的事情,我卡住了
  • 仅供参考:我正在Windows7上运行2019社区版gnat、ARM交叉编译器和GPS

    更新:2019-12-18:

    我取得了一些进展,但仍然不能正常工作。我按照Fabien的建议编辑了test_driver.gpr。我不得不注释掉原来的链接器包,因为它不能与文件中的两个链接器一起工作

    test_driver.gpr现在看起来像这样:

    带有“test\u demo\u project.gpr”;
    使用“gnattest_common.gpr”;
    带有“c:\Domains\ada\ada\u Drivers\u Library\boards\MicroBit\MicroBit\u zfp.gpr”;
    项目测试驱动程序是
    对于Origin\u项目,请使用“.\\\\.\demo\u Project.gpr”;
    对于目标使用Gnattest_Common'Target;
    对于运行时(“Ada”)使用Gnattest_Common'Runtime(“Ada”);
    语言使用(“Ada”、“ASM_CPP”);
    主要用途(“test_runner.adb”);
    对于Exec_Dir,使用“.”;
    包生成器重命名Gnattest_Common.Builder;
    --包链接器重命名Gnattest_Common.Linker;
    包链接器是
    对于默认的_开关(“Ada”)使用MicroBit_ZFP.Linker_开关&
    (“-Wl,--print memory usage”,
    “-Wl,--gc章节”);
    末端连接器;
    包装活页夹重命名Gnattest_Common.Binder;
    包编译器重命名Gnattest_Common.Compiler;
    包Ide重命名test_demo_project.Ide;
    包GNATtest是
    对于GNATTest_映射_文件,请使用“GNATTest.xml”;
    末端小昆虫;
    终端测试驱动程序;
    
    它不能解决为ada驱动程序库生成测试用例的问题,但我可以使用“-test case only”标志运行gnattest,这基本上实现了我的目标

    但当我构建项目时,它抱怨“ASM_CPP”语言和断言的使用。见下文:

    gprbuild --target=arm-eabi -d -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr -XADL_BUILD_CHECKS=Enabled -XADL_BUILD=Debug -XTEST_DRIVER_BUILD_MODE=no-config-file -largs -Wl,-Map=map.txt
    test_driver.gpr:5:09: warning: there are no sources of language "ASM_CPP" in this project
    Compile
       [Ada]          battery-test_data-tests.adb
    battery-test_data-tests.adb:40:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
    battery-test_data-tests.adb:40:13: warning: this handler can never be entered, and has been removed
    battery-test_data-tests.adb:53:13: warning: pragma Restrictions (No_Exception_Propagation) in effect
    battery-test_data-tests.adb:53:13: warning: this handler can never be entered, and has been removed
    Bind
       [gprbind]      test_runner.bexch
       [Ada]          test_runner.ali
    Link
       [link]         test_runner.adb
    Memory region         Used Size  Region Size  %age Used
               flash:       21668 B       256 KB      8.27%
                 ram:        3056 B        16 KB     18.65%
    [2019-12-19 08:39:18] process terminated successfully, elapsed time: 02.08s
    [2019-12-19 08:39:21] The selected rows in the Locations view cannot be exported, please select files and/or categories.
    
    我试图删除“ASM_CPP”文本,警告消失了。我现在不知道如何删除关于使用异常的警告

    当我运行测试时,我得到以下信息:

    arm-eabi-gnatemu -PC:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_driver.gpr C:\Domains\ada\Demo_Project\microbit\obj\gnattest\harness\test_runner
    [2019-12-19 08:40:01] process terminated successfully, elapsed time: 00.66s
    

    当我的测试失败或通过时,我得到相同的输出。关于使用异常的警告是否会导致编译器删除异常,从而破坏测试?我必须做什么才能允许测试中出现异常?

    您链接的问题是关于只测试几个子程序,而不是测试一个项目中的所有源代码,这应该很容易:

    gnattest-Pproject.gpr

    您可以指定一个或多个特定文件:

    gnattest-Pproject.gpr文件1.ads文件2.ads


    只要避免
    -r
    ,你就会没事了:

    -R递归地考虑所有项目的所有来源< /P>


    上次更新中的编译错误似乎表明您没有指定链接器脚本和启动代码

    这些在Ada驱动程序库中的项目文件
    boards/MicroBit/MicroBit_zfp.gpr
    中提供

    因此,您首先必须使用
    test\u driver.gpr
    项目中的该项目,然后将这些行添加到
    test\u driver.gpr
    项目中:

    package Linker is
       for Default_Switches ("Ada") use MicroBit_ZFP.Linker_Switches &
                                        ("-Wl,--print-memory-usage",
                                         "-Wl,--gc-sections");
    end Linker;
    
    您还必须在
    test\u driver.gpr
    中的语言列表中添加程序集:

    for Languages use ("Ada", "ASM_CPP");
    

    我对问题进行了编辑,以包含我最初运行的命令和您建议的命令的结果,该命令引发了一个错误。看起来我无法使用您建议的命令,因为我正在为ARM编译。想法?是的,gnattest是用于本机开发的,对于ARM的交叉编译,您应该使用ARM eabi gnattest,就像在您的编辑中一样。您对未来的发展有什么想法吗?我运行了arm eabi gnat测试,为项目中的单个文件创建了一个测试。成功地创建了
    for Languages use ("Ada", "ASM_CPP");