ビルドプロセスには、ビルドとテストの2つのターゲットが必要です。他に何も指定しない場合、テストはデフォルトのターゲットにする必要があります。テストはプロジェクトがビルドされるまで実行できないため、ビルドターゲットはテストの依存関係です。だから(makeを使用すると仮定します):make
またはmake test
がビルドしてテストします。 make build
はプロジェクトをビルドするだけです。
IDEを使用している場合は、IDEの「外側」で別の方法でテストすることを検討できます。だから、おそらく3番目のターゲットide
を追加して、ideがそれを構築できるようにしてください。その後、通常の依存関係としてビルドターゲットを持つことができ、最後のステップでバックグラウンドでテストを行うために新しいタスクを生成することができます。これはLinuxのようなものです:(xterm -e ./run-tests &)。
ideの外で開発している場合(私のように)、個別の端末でビルド&テストを実行してください。テストが始まるとすぐに、ビルドプロセスが完了したことを知っているので、テストがまだ実行中であっても、アプリケーションはすでに実行できます。
はこれを実証する(バックグラウンドでテストランを持つためのコンセプトの証明として)私はいくつかの些細なテストケース作成:
ボーデを。C:
#include <stdio.h>
int main(int argc, char * argv[]) {
printf("Hallo %s", argc > 1 ? argv[1] : "Welt");
return 0;
}
のMakefile:
test: build run-tests
ide: build run-tests-background
run-tests-background:
(xterm -e ./run-tests --wait &)
run-tests:
./run-tests
build: bodo
bodo: bodo.o
bodo.o: bodo.c
.PHONY: run-tests run-tests-background
実行テスト:
#! /bin/sh
retval=true
if test "$(./bodo)" != "Hallo Welt"
then
echo "Test failed []"
retval=false
fi
if test "$(./bodo Bodo)" != "Hallo Bodo"
then
echo "Test failed [Bodo]"
retval=false
fi
if test "$(./bodo Fail)" != "Hallo Bodo"
then
echo "Test failed [Fail]"
retval=false
fi
sleep 5 # Simulate some more tests
if $retval
then
echo "All tests suceeded ;)"
else
echo "Some tests failed :("
fi
if test "$1" == "--wait"
then
read -p "Press ENTER to close" enter
fi
if $retval
then
exit 0
else
exit 2
fi
使用法:
は、プロジェクトをビルドしますが、テスト
make build
を実行しないでください
プロジェクトをビルドし、
make
現在の端末でテストを実行するかは、プロジェクトをビルドし、別の端末でテストを実行してください。作るビルドプロセスが完了し、テストを手動で実行するものではありません
make ide
そして2ヘルパーを、始まった後に返されます: のみ現在の端末でテストを実行します(これは失敗し、プロジェクト場合
テストを別の端末で実行します(プロジェクトがまだ構築されていない場合は失敗します)。 makeは即座に戻ります
make run-tests-background
上記の両方。 – kryger