バックグラウンド
回帰スイートの一部としてMakefilesを使用します。デフォルトのルールがいくつかあります。
%.tmp_expect: ...
@echo "Rule that produces results from the current tool version"
%.tmp_expect_filter: %.tmp_expect
@echo "Take $*.tmp_expect and remove content specific to the machine/date"
%.tmp_expect_filter_sort: %.tmp_expect_filter
@echo "Rule to sort $*.tmp_expect_filter"
次に、これらのルールはトップレベルのルールによって使用されます。
%.do: %.tmp_expect_filter_sort
@echo "Create output using current version and diff against expected output"
@diff $< $*.expect
%.genexpect: %.tmp_expect_filter_sort
@echo "Generate 'goldstandard' expected output"
@cp $< $*.expect
「genexpect」ルールはテストケースに対して1回呼び出され、テストに対して「ゴールドスタンダード」出力と呼ばれるものを生成します。開発が進むにつれて、「do」ルールは、現在のバージョンが「goldstandard」と同じ出力を生成することを確認します。
これらのルールはすべて、独自の特別なファイル「Make.Test」に保存され、回帰テストのあるディレクトリのMakefilesにそのファイルを含めます。
問題
デフォルトの%.tmp_expectで提供されるものとは少し異なる出力が必要になる場合があります。これを行うには、ローカルのMakefileに独自の%.tmp_expectルールを実装させます。これは、関心のあるすべてのプラットフォーム(Windows、Linux、Solaris)で機能します。
ただし、出力を並べ替えたくない場合は、次のようなルールを追加できると思います。
%.tmp_expect_filter_sort: %.tmp_expect_filter
@cp $< $@
これは物事がかなり奇妙になるところです。プラットフォームに応じて、このルールが「Make.Test」ファイルを含める前または後に表示される場合は、選択されている場合とされていない場合があります。
だから私の質問は:
- 特定のターゲットに使用するルールをどのように決定しますか?
- どのルールを選択するかを制御できるように、ルールをどのように作成すればよいですか?