簡體   English   中英

CMake:如何設置庫的單元測試

[英]CMake: How to setup unit testing of a library

我在一個kata項目下工作,學習如何用C ++編寫單元測試( 鏈接到存儲庫 )。 該項目中的一個元素是DictionaryPath庫。 它放在一個帶有專用CMakeFile.txt的單獨目錄中:

cmake_minimum_required(VERSION 3.6 FATAL_ERROR)

add_library(DictionaryPath
        include/DictionaryPath/Dictionary.h
        src/Dictionary.cpp
        include/DictionaryPath/DictionaryPath.h
        src/DictionaryPath.cpp
        src/WordsGraph.cpp
        src/WordsGraph.h
        src/DijkstraAlgorithmImpl.cpp
        src/DijkstraAlgorithmImpl.h
        src/Path.cpp
        src/Path.h
        src/Graph.h
        src/ShortestPathAlgorithm.h
        src/DijkstraAlgorithm.h)

target_include_directories(DictionaryPath PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
    PRIVATE src)

它可以找到其他目標(庫的客戶端),但是當我嘗試在同一個子目錄中添加單元測試時,我遇到了如何為單元測試定義目標的問題。 Eq WordsGraph類。 我定義了一個目標:

add_executable(WordsGraphTest test/WordsGraphTest.cpp)
target_link_libraries(WordsGraphTest GTest::main DictionaryPath)
add_test(NAME WordsGraphTest COMMAND WordsGraphTest)

但是,如果我嘗試引用WordsGraph頭文件,我有:

test/WordsGraphTest.cpp:9:10: fatal error: 'WordsGraph.h' file not found

我理解一個原因 - src/中的文件是私有的,但在這種情況下如何測試庫內部文件而不實現鏈接到它的每個目標? 我應該在每個單元測試中復制必要的庫文件的編譯嗎?

解決你遇到的問題應該很容易(找不到WordsGraph.h)。 您可以使用include_directories或target_include_directories。

add_library(DictionaryPath
        ...
        src/WordsGraph.h
        ...
)

target_include_directories(DictionaryPath PUBLIC
    ...
    PRIVATE src)

WordsGraph.h位於src ,您將src聲明為DictionaryPath的私有包含目錄。

如果你不想做的比調用更target_link_libraries創建單元測試時,您應該移動WordsGraph.hinclude或聲明src作為公共或接口包括目錄。

如果您不想將WordsGraph.h移動到include ,也不想將src聲明為公共或接口包含目錄,則應該添加對target_include_directories的調用:

add_executable(WordsGraphTest test/WordsGraphTest.cpp)
target_link_libraries(WordsGraphTest GTest::main DictionaryPath)

target_include_directories(WordsGraphTest PRIVATE src)

add_test(NAME WordsGraphTest COMMAND WordsGraphTest)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM