GNU オートツールを使用して「メイクチェック」のテストを作成するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/130801

質問

特定のプロジェクトのビルド システムに 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
  1. ./configure.ac

    PKG_CHECK_MODULES([チェック], [チェック >= 0.9.10])

  2. ./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@
    
  3. そしてテストコードを書いて、 ./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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top