26

公式の Check チュートリアルに従おうとしていますが、それには Autotools の実用的な知識が必要ですが、それは私にはありません。簡単なテストをいくつか書きたいと思っていたのですが、このチュートリアルには圧倒されてしまいました。これは、Autoconf、Automake、および一部の Check マクロの多くの魔法に依存しています。Check が実際にどのように機能するかについては説明していないので、手動でテストを作成できます。

Autotools なしで Check を使用するにはどうすればよいですか?

4

2 に答える 2

46

小さなプロジェクトでチェックを使用するために autotools を学ぶ必要はありません。main() が main.c にあり、 implementation.c に 2 つの int を合計する関数があるとします。(implementation.h には関数プロトタイプのみが含まれます)

#include "implementation.h"

int sum(int a, int b) {

    return a + b;
}

次のようにテストを書くことができます。

#include "implementation.h"

#test sum2test
    fail_unless(sum(3, 2) == 5, "sum function borked");
    fail_unless(sum(-3, 2) == -1, "sum function borked");
    fail_unless(sum(3, -2) == 1, "sum function borked");
    fail_unless(sum(-3, -2) == -5, "sum function borked");

ファイルを implementation-test.check に保存し (任意の名前/拡張子を選択できますが、私のガイドに従いたい場合はそのままにしてください)、Check に付属の awk スクリプトを実行します。チェック フレームワークのボイラープレート コードを気にする必要さえありません。(詳細はman checkmk)

checkmk implementation-test.check >implementation-test.c

出力は次のようになります。

/*
 * DO NOT EDIT THIS FILE. Generated by checkmk.
 * Edit the original source file "implementation-test.check" instead.
 */

#include <check.h>

#line 1 "implementation-test.check"
#include "implementation.h"

START_TEST(sum2test)
{
#line 4
    fail_unless(sum(3, 2) == 5, "sum function borked");
    fail_unless(sum(-3, 2) == -1, "sum function borked");
    fail_unless(sum(3, -2) == 1, "sum function borked");
    fail_unless(sum(-3, -2) == -5, "sum function borked");
}
END_TEST

int main(void)
{
    Suite *s1 = suite_create("Core");
    TCase *tc1_1 = tcase_create("Core");
    SRunner *sr = srunner_create(s1);
    int nf;

    suite_add_tcase(s1, tc1_1);
    tcase_add_test(tc1_1, sum2test);

    srunner_run_all(sr, CK_ENV);
    nf = srunner_ntests_failed(sr);
    srunner_free(sr);

    return nf == 0 ? 0 : 1;
}

次に、コンパイル時に -lcheck を含めて、リンクされたチェック ライブラリを取得し、プログラムを実行します。

gcc -Wall -o sum2ints-test implementation.c implementation-test.c -lcheck
./sum2ints

以下は、作業を開始するための簡単な makefile です。これを sum2ints.makefile に保存してから、main とともに implementation.c をビルドするには、次のコマンドを実行します。

make -f sum2ints.makefile

checkmk から作成された implementation-test.c で implementation.c をビルドして実行するには、次を実行します。

make -f sum2ints.makefile test

-

CFLAGS=-Wall
LIBS=-lcheck

all: sum2ints

sum2ints: main.o implementation.o
gcc -o sum2ints main.o implementation.o

main.o: main.c implementation.h
gcc $(CFLAGS) -c main.c

implementation.o: implementation.c implementation.h
gcc $(CFLAGS) -c implementation.c

test: sum2ints-test
./sum2ints-test

sum2ints-test: implementation-test.o implementation.o
gcc -o sum2ints-test implementation.o implementation-test.o $(LIBS)

implementation-test.o: implementation-test.c implementation.h
gcc $(CFLAGS) -c implementation-test.c

上記のすべてを含む .zip ファイルを用意しました。

https://dl.dropbox.com/u/1987095/test-check.zip

于 2013-02-23T23:17:19.003 に答える