雑文発散

«前の日記(2014-08-16) 最新 次の日記(2014-08-18)» 編集
過去の日記

2014-08-17 [長年日記]

[Emacs] Emacs Lisp のユニットテストツール ERT について調べてみた #2

昨日の日記の続き。

ERT の実行結果が表示されているバッファには、いくつかのキーバインドが設定されていてる。単に結果表示の場所ではなく、テスト実行やデバッグのためのインターフェイスを兼ねているイメージ。

キーバインド 機能
TAB / S-TAB プログレスバー / テスト結果間の移動
RET プログレスバー上から結果へ、テスト名から定義箇所へジャンプ
r カーソル位置に近いテストの再実行
d デバッグモードを ON にしてテストを再実行
. テストケースの定義箇所へジャンプ
b 失敗したテストケース上で入力するとバックトレース表示
l should のテストのリスト表示
m テストケース内での message 結果を表示(print debug)

昨日もちょっと書いたけど Selector についての詳細。いろいろな指定をして実行するテストケースを選択(絞り込み)ができる。

Selector 名 選択内容
nil なにも選択しない
t 全てのテストケースを選択
:new 未実行のテストケースを選択
:failed 失敗したテストケースを選択
:passed 成功したテストケースを選択
:expected 成功を期待するテストケースを選択(?よくわからない)
:unexpected 失敗を期待するテストケースを選択(?よくわからない)
"正規表現" 正規表現とマッチするテストケースを実行
テスト 指定したテスト(ert-testオブジェクト)のみ実行
シンボル 指定したシンボルのテストケースを選択

これらの他にも (member TESTS...)(eql TEST)(and SELECTORS)(or SELECTORS)(not SELECTORS)(tag TAG)(satisfies PREDICATE) などがマニュアルには記載されているんだけど、ERT のインタラクティブモードでは使えないようだ。バッチモードで使うのかな。

アサーション用のキーワード(マクロ)についてもいくつか用意されている。

アサーション名 内容
should 成功を期待
should-not 失敗を期待
should-error エラーが発生することを期待(エラータイプを指定)
should-not-error エラーが発生しないことを期待(暗黙に設定されている)

known bug などで「今のところ失敗することが分かっているけど、まだ直せていない動作」をテストとして書いておくこともできるようだ。この場合は、:expected-result :failed と定義すれば良いようだ。

この場合「失敗することが分かっている失敗」については、プログレスバーの表示が小文字の「f」かつ緑色で表示される。失敗を意味する赤い大文字の「F」とは別の表記になる。

Selector のところの :expected と関連ありそうなんだけど、ちょっと動作について理解しきれていない。

条件によってテストをスキップすることもできる。この場合はテストケース内に (skip-unless ...) と条件を記載すると良いようだ。