次: , 前: Using an Autotest Test Suite, 上: Using Autotest


16.2 testsuite.atを書く

testsuite.atはBourneシェルスクリプトで,特殊なAutotest M4マクロを 使用して作成します.それは,最初の方でAT_INITの呼び出しを含んでい て,それにテストのためのソースファイルごとにm4_includeの呼び出し が続きます.それぞれのインクルードファイルや,インクルードファイルが使用 されていない場合はtestsuite.atの残りは,テストグループの連続した 手続きが含まれています.それぞれのテストグループはAT_SETUPの呼び 出しで始まり,それは任意の数のシェルコマンドやAT_CHECKの呼び出し が含まれていて,AT_CLEANUPの呼び出しで完結します.

— マクロ: AT_INIT ([name])

Autotestを初期化します.パッケージに複数のテストスイートを含める場合,テ ストスイートにnameを与えることが推奨されます.すべての状況で,テス トスイートは常にパッケージ名とバージョンを表示します.それはパッケージの バグを報告する(メール)アドレスも継承します.

— マクロ: AT_TESTED (executables)

それぞれのプログラムのパスと--versionの答を,スペースで分離され ているリストexecutablesにログをとります.複数回呼び出されると新し い実行が登録され,言い替えると,一つのプログラムの複数回の登録を危惧する 必要はありません.

Autotestテストスイートは,テストされるプログラムを見つける際に PATHに依存します.これは様々なツールの絶対パスから生成されるもの から保存され,インストールされているプログラムのテストを可能にします.そ のため,動作しているプログラムを知ることは,テストスイート自身やその偶発 的な誤使用の問題を理解するために重要です.互換性の問題を簡単に診断するた めに,依存している外部のプログラムを登録することも重要です.


— マクロ: AT_SETUP (test-group-name)

このマクロは関連するテストのグループがすべて同じサブシェルで実行されるよ うに開始します.それは,開始されるテストグループの目的を手短に記述した数 語の単語(30から40文字以下)を保持している,単一の引数を受け入れます.

— マクロ: AT_KEYWORDS (keywords)

まとまっているテストグループに関連する,スペースで分離されている keywordsのリストです.これでテストスイートの“slices”を実行するこ とが可能になります.例えばテストグループの`foo'の機能を行使している 場合,`AT_KEYWORDS(foo)'を使用することで,これらのテストグループを 排他的に実行するために`./testsuite -k foo'を実行します.テストグルー プのtitleは,AT_KEYWORDSに自動的に保存されます.

テストグループ内で複数回呼び出すことで新しいキーワードを累積します.言い 替えると,テストグループで同じキーワードを複数回登録することを危惧する必 要はありません.

— マクロ: AT_XFAIL_IF (shell-condition)

テストが,既知のバグで期待されたように失敗するかどうかを決定します(サポー トされていない機能に対してはテストを省略するべきです). shell-conditiontestコマンドのようなシェルの式です.同じテ ストグループから,このマクロを何回でも利用することが可能で,テストが期待 した異常終了になるには,条件の一つで十分でしょう.

— マクロ: AT_CLEANUP

現在のテストグループを終了します.


— マクロ: AT_DATA (file, contents)

入力データのfileを,与えられたcontentsで初期化します.もちろ ん,カンマが含まれていることや,見せかけのM4の展開から保護するために, contentsは適切に角カッコで囲む必要があります.内容は行末(EOF)で終 える必要があります.

— マクロ: AT_CHECK (commands, [status = ``0''], [stdout = ``''], [stderr = ``''], [run-if-fail], [run-if-pass])

与えられたシェルコマンドcommandsを実行することでテストを実行します. これらのコマンドは,期待されるstdoutstderrの内容を生成しな がら,通常のstatusで終えるべきです.commandsが77のステータス で終了する場合,テストグループ全体が省略されます.それ以外で,このテスト が失敗する場合はシェルコマンドrun-if-failを実行し,このテストがパ スした場合はシェルコマンドrun-if-passを実行します.

commandsを標準出力にも標準エラー出力にもリダイレクトしてはい けません

status,またはstdout,またはstderrが`ignore'の場 合,対応する値は調査されません.

stdoutに対する特殊な値`expout'は,commandsの出力がファ イルexpoutの内容であることを期待するという意味があります. stdoutが`stdout'の場合,commandsの標準出力はファイル stdoutのテスト以外でも利用可能です.`expout'と`stderr' を用いているstderrも同様です.