2016-12-16 39 views
0

我正在開發一個嵌入式應用程序的功能,並且使用Ceedling(它建立在Unity測試框架之上)來測試它。我遇到的一個問題是我需要使用C源文件中的功能,Ceedling不會編譯/鏈接到我的單元測試文件。如何手動指定Ceedling無法拾取的源文件?

按照Ceedling文檔:

Ceedling知道什麼文件被包含在每個測試 文件中的#include列表的方式來編譯和鏈接到每個單獨的 測試可執行文件。 對應於測試文件中包含的頭文件的配置搜索目錄中的任何C源文件將被編譯並鏈接到最終的測試夾具可執行文件中。

的問題是,我,包括我的單元測試,以獲得訪問embOS RTOS功能的頭文件「RTOS.h」,但這些功能在「RTOSInit.c」定義「os7m_tl__dp.a 「,根據本文檔,當Ceedling在單元測試代碼中看到#include "RTOS.h"時,它只會查找」RTOS.c「。

我正在尋找的是一種手動指定這些附加文件應該在生成測試運行器可執行文件時編譯和鏈接的方法。這似乎是Ceedling的一個非常基本的要求,但我無法從文檔中找到這樣做的方法。

我也有在Ceedling Github網站上的raised this as an issue

僅供參考,我目前的「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你能對你的意思是說什麼澄清?當我看到'#include「RTOS.h」'時,我如何使用符號鏈接讓Ceedling的圖形包含「RTOSInit.c」和「os7m_tl__dp.a」? – Tagc

+0

哦,你在窗戶上。對不起,這不會在那裏工作。 –

回答

0

我有同樣的問題,同時測試號RTOS和使用的空的頭文件,迫使Ceedling編制相應的源文件。幸運的是,Unity中增加了一個新宏,可以解決這個問題。只需添加在您的測試文件的頂部類似的東西:

TEST_FILE("source_file_to_compile.c") 
相關問題