2016-12-16 10 views
0

Я разрабатываю функцию для встроенного приложения, и я использую Ceedling (который строится поверх оболочки Unity), чтобы проверить его. Проблема, которую я испытываю, заключается в том, что мне нужно использовать функциональность в исходных файлах C, которые Ceedling не компилирует и не связывает с моими тестовыми файлами.Как я могу вручную указать исходные файлы, которые Ceedling не может получить?

Согласно документации Ceedling:

Ceedling знает, какие файлы для компиляции и ссылки в каждый отдельный тест исполняемого путем списка #include, содержащемся в каждом тестовом файле. Любые исходные файлы C в настроенных каталогах поиска, которые соответствуют файлам заголовков, включенным в тестовый файл, будут , скомпилированные и связанные с полученным тестовым адаптером.

Проблема заключается в том, что я в том числе заголовочный файл «RTOS.h» в моих модульных тестов, чтобы получить доступ к функциям embOS RTOS, но эти функции определены в «RTOSInit.c» и «os7m_tl__dp.a », и в соответствии с этой документацией Ceedling будет искать только« RTOS.c », когда он увидит #include "RTOS.h" в модульном тестовом коде.

Что я ищу - это способ вручную указать, что эти дополнительные файлы должны быть скомпилированы и связаны при создании исполняемого файла тестового бегуна. Это похоже на очень основное требование Ceedling, но я не вижу способа сделать это из документации.

У меня также есть raised this as an issue на сайте Ceedling Github.

Для справки, мой текущий файл «project.yml» (используется Ceedling) приводится ниже:

:project: 
    :use_exceptions: FALSE 
    :use_test_preprocessor: FALSE 
    :use_auxiliary_dependencies: TRUE 
    :build_root: build 
    :release_build: FALSE 
    :test_file_prefix: test_ 

:environment: 
    - :path: 
    - 'C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\bin' 
    - 'C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\common\bin' 
    - #{ENV['PATH']} 

:extension: 
    :executable: .out 

:paths: 
    :test: 
    - +:test/** 
    - -:test/support 
    :source: 
    - src/main/c/** 
    - src/main/include/** 
    - src/main/resources/** 
    :support: 
    - test/support 

:defines: 
    :commmon: &common_defines [] 
    :test: 
    - *common_defines 
    - TEST 
    :test_preprocess: 
    - *common_defines 
    - TEST 

:cmock: 
    :mock_prefix: mock_ 
    :when_no_prototypes: :warn 
    :enforce_strict_ordering: TRUE 
    :plugins: 
    - :ignore 
    - :callback 
    :treat_as: 
    uint8: HEX8 
    uint16: HEX16 
    uint32: UINT32 
    int8:  INT8 
    bool:  UINT8 

:tools: 
    :test_compiler: 
    :executable: iccarm 
    :name: 'IAR test compiler' 
    :arguments: 
     - -D _DLIB_FILE_DESCRIPTOR=1 
     - --debug 
     - --endian=little 
     - --cpu=Cortex-M3 
     - -e 
     - --fpu=None 
     - -Ol 
     - --preprocess "${3}" 
     - --dlib_config "C:/Program Files (x86)/IAR Systems/Embedded Workbench 6.5/arm/INC/c/DLib_Config_Normal.h" 
     - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE 
     - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR 
     - -o "${2}" 
     - --diag_suppress=Pa050 
     - '"${1}"' 

    :test_linker: 
    :executable: ilinkarm 
    :name: 'IAR test linker' 
    :arguments: 
     - --vfe 
     - --redirect _Printf=_PrintfFull 
     - --redirect _Scanf=_ScanfFull 
     - --semihosting 
     - --config "C:/Program Files (x86)/IAR Systems/Embedded Workbench 6.5/arm/config/generic_cortex.icf" 
     - --map "${3}" 
     - -o "${2}" 
     - '"${1}"' 

    :test_fixture: 
    :executable: cspybat 
    :name: 'CSpyBat test runner' 
    :arguments: 
     - '"C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\bin\armproc.dll"' 
     - '"C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\bin\armsim2.dll"' 
     - '"${1}"' 
     - --plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\bin\armbat.dll" 
     - --backend -B 
     - --endian=little 
     - --cpu=Cortex-M3 
     - --fpu=None 
     - --semihosting 

:plugins: 
    :load_paths: 
    - vendor/ceedling/plugins 
    :enabled: 
    - stdout_pretty_tests_report 
    - module_generator 
... 
+0

Просто создать символическую ссылку, и он должен работать –

+0

@iharob Можете ли вы уточнить, что вы подразумеваете под этим? Как я могу использовать символические ссылки, чтобы заставить фигуру Ceedling включать «RTOSInit.c» и «os7m_tl__dp.a», когда она видит «#include» RTOS.h »? – Tagc

+0

О, ты на окнах. Извините, это не сработает. –

ответ

0

У меня была такая же проблема при тестировании NOS RTOS и использовать пустые файлы заголовков, чтобы заставить Ceedling составить соответствующий исходные файлы. К счастью, в Unity добавлен новый макрос, который решает проблему. Просто добавьте что-то подобное в верхней части тестовых файлов:

TEST_FILE("source_file_to_compile.c") 

 Смежные вопросы

  • Нет связанных вопросов^_^