web-dev-qa-db-ja.com

Catch lib(単体テスト)とCTest(CMake)の統合

Catch CatchLib CMake test(Ctest)との統合の成功例を探しています。私が理解しているように、これはアプリケーションの出力を解析する必要がある追加のcmakeスクリプトですか?誰かがすでにこれを書いていましたか?おそらくこれを共有しましたか?

=================================================

更新(解決策が見つかった):

CatchとCTestの統合のために、 cmake script をCatchLibにコミットしました。これは、Fraser99のcmakeスクリプトの簡易バージョンです here

20
amigo421

CatchとCMakeの統合は、ヘッダーのみのライブラリであるため、かなり簡単です。

ここに、あなたがしなければならないことの簡単な要約があります:

Catchソースが既にビルドマシンにインストールされていると仮定するか、ビルドプロセスの一部としてフェッチするために ExternalProject を使用できます。

どちらの場合でも、ビルドマシンの既知のディレクトリにCatchヘッダーファイルが作成されます。この情報をテスト実行可能ファイルに知らせるためのインターフェイスターゲットを作成することをお勧めします。

add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})

そうすれば、Catchをtarget_link_librariesへの依存関係として単純に指定できます。

add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test Catch)

CMakeの場合と同様に、 add_test はCTestにテストを導入します。

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

そして、それはすでにそれです。ビルドされたプロジェクトでmake testを実行して、テストを実行します。

Githubのプロジェクト があり、完全な実例を見る必要がある場合にこれを行います。

38
ComicSansMS

以下を使用してcatchをインストールします。

 $ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
 $ mkdir <catch_bin_dir>
 $ cd <catch_bin_dir>
 $ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
 $ make
 $ make install

次に、CMakeLists.txtに次を追加します。

find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)

here を参照してください。

6
ricab