GNU オートツールを使用して「メイクチェック」のテストを作成するにはどうすればよいですか
-
02-07-2019 - |
質問
特定のプロジェクトのビルド システムに GNU autotools を使用しています。検証用の自動テストの作成を開始したいと考えています。「make check」と入力するだけで、これらを自動的に実行できるようにしたいと考えています。私のプロジェクトは C++ ですが、他の言語でも自動テストを作成することにまだ興味があります。
これは、世の中のほぼすべての単体テスト フレームワークと互換性がありますか (cppunit を使用することを考えていました)?これらの単体テスト フレームワークを make check にフックするにはどうすればよいですか?プロジェクトの残りの部分を構成してビルドするために単体テスト ソフトウェアをインストールする必要がないことを確認できますか?
解決
発行時にテストを実行するには make check
, に追加する必要があります。 TESTS
変数
単体テストを実行する実行可能ファイルをすでにビルドしていると仮定すると、次のように実行可能ファイルの名前を TESTS 変数に追加するだけです。
TESTS=my-test-executable
これは、次のときに自動的に実行されるはずです。 make check
, 実行可能ファイルがゼロ以外の値を返した場合、それをテスト失敗として報告します。複数の単体テスト実行可能ファイルがある場合は、それらをすべてリストします。 TESTS
変数:
TESTS=my-first-test my-second-test my-third-test
そして彼らは全員逃げられるだろう。
他のヒント
使っています 0.9.10をチェック
configure.ac
Makefile.am
src/Makefile.am
src/foo.c
tests/check_foo.c
tests/Makefile.am
./configure.ac
PKG_CHECK_MODULES([チェック], [チェック >= 0.9.10])
./tests/Makefile.am
テストコード用TESTS = check_foo check_PROGRAMS = check_foo check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h check_foo_CFLAGS = @CHECK_CFLAGS@
そしてテストコードを書いて、
./tests/check_foo.c
START_TEST (test_foo) { ck_assert( foo() == 0 ); ck_assert_int_eq( foo(), 0); } END_TEST /// And there are some tcase_xxx codes to run this test
チェックを使用すると、タイムアウトを使用してシグナルを発生させることができます。とても役に立ちます。
最初の段落で 2 つの質問をしているようです。
1 つ目は、GNU autotools ツールチェーンにテストを追加することです。ただし、私の理解が正しければ、これらのテストは、アプリケーションのビルドに必要な環境 (依存ライブラリとツール) が存在することを検証することと、ビルドを適応させることの両方を目的としています。環境 (プラットフォーム固有の違い)。
2 つ目は、C++ アプリケーションの単体テストと、それらのテストをどこで呼び出すかについてです。autotools ツール チェーン (おそらくはconfigure スクリプト) から実行することを提案しました。ただし、これは従来のやり方ではありません。Makefile に「テスト」ターゲットを入れるのが、テスト スイートを実行するより従来的な方法です。オートツールを使用してアプリケーションを構築およびインストールするための一般的な手順は (開発者の観点ではなく、少なくともユーザーの観点から)、configure スクリプトを実行し、次に make を実行し、次にオプションで make test を実行し、最後に make install を実行することです。
2 番目の問題として、cppunit を依存関係にしたくないのであれば、cppunit を C++ アプリケーションと一緒に配布すればよいのではないでしょうか?ソースコードと一緒に、使用しているアーカイブ形式(tar.gz、tar.bz2、または.zip)に正しく配置できますか。私は過去に cppunit を使用したことがあり、JUnit や他の xUnit スタイルのフレームワークを使用していたので、それに満足していました。
Automakeのものを使用できます TESTS
で生成されたプログラムを実行するには check_PROGRAMS
ただし、これは出力にログ ドライバーとコンパイラーを使用していることを前提としています。まだまだ使いやすいかも知れません check_PROGRAMS
ただし、Makefile のローカル ルールを使用してテスト スイートを呼び出すには、次のようにします。
check_PROGRAMS=testsuite
testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...
check-local:
./testsuite