2017-08-22 13 views
0

私はcmakeとctestに関しては分かりません。私は実際に良いチュートリアルやctestをよく説明するものは見つけられません。ctestでテストごとに別々のファイルが必要ですか?

私のコードにいくつかのテストを書こうとしました。私がターゲットにテストを作成するために、CMakeLists.txtを作成しました

int main() 
{ 
    test1(); 
    test2(); 
    test3(); 
    ... 
    exit(0); 
} 

:私はすべてのこのようなmain.cppにから呼び出され異なる機能でテストを置きます。

set (TESTS 
     main.cpp 
) 
add_executable (tests ${TESTS}) 
target_link_libraries (tests ...) 

enable_testing() 
add_test(my-test tests) 

今、それぞれが独立した機能で、私はcTESTを実行

$ ctest run 
Test project /.../tests 
    Start 1: my-test 
1/1 Test #1: my-test ......................... Passed 0.01 sec 

100% tests passed, 0 tests failed out of 1 

Total Test time (real) = 0.01 sec 

呼び出すことができますが、内部的に、私は複数のテストケースを持っているが、これは私に一つだけのテストケースを提供します。私はファイルを分離するために関数を抽出することができましたが、私は何百ものファイルを持っていました。テストごとにファイルを分割することを避けるにはどうすればよいですか?

私はこのようなものを探していました。

add_test(test1 tests::test1()) 
add_test(test2 tests::test2()) 

私はこれが間違っていてナイーブであることを十分に認識しています。しかし、私はあなたが私の問題のアイデアを得ることを願っています。

答えて

2

CTestはコマンド、つまり実行可能ファイルまたは同等のものでのみ動作します。テストランナーを呼び出します。テストランナーそのものではありません。

テストの正常なアプローチが

  1. 例えば、テストランナーを作成するために、粒状のテストをサポートテストフレームワークを使用して出力をもたらすことですCatchやGoogle Test/Google MockやPython
  2. テストランナーをカテゴリ別にグループ化する好ましくは各カテゴリ内で、各テストランナー内の単位テストをモジュール単位、すなわち単位テストランナーが2つ以上のモジュールをテストすることはない時間単位で整理することが好ましい。

このような観点から、問題は手順1と思われます。詳細なテスト出力を作成するには、テストフレームワークが必要です。

+0

私はcmockaを使用しており、良い結果が得られています。しかしそれはC専用です – jerrylogansquare

関連する問題