Skip to content

Test framework for Vim scripts

Shougo edited this page Jan 22, 2013 · 13 revisions

Vim script用のテストフレームワークはVCS系のプラグイン以上に乱立している。 各フレームワークの違いが分からなくなりやすいので、ここにまとめる。 まだ内容は工事中。

基本的に、現在の Vim からの実行にのみ対応だと実装が楽で確認も容易。 ただし実行結果がテスト環境の .vimrc, plugin 環境に依存してしまう。 テスト実行後の副作用の問題もある。 コマンドラインからの実行だと、副作用はないがテストの実行が面倒である(特に Windows 環境)。 プラグインが別のプラグインに依存している場合、runtimepath の指定が大変。

テスト用の関数を登録するものは、修正後の再ロードが難しい。

フレームワークには関数系とコマンド系がある。関数系のほうが記述の自由度が高く分 かりやすいが、テストの記述は長くなりがちである。

テストの構文は大きく分けて TAP 系と Spec 系と Unit 系がある。構文としてどれが優 れている、ということはなく好みの問題である。

UI のテストまでできるものは、ほぼないことが分かっている。 既存のものでも頑張ればできるかと思うが……。

vesting

https://github.com/Shougo/vesting

  • Author: Shougo
  • Spec 系
  • 現在の Vim からの実行にのみ対応(単体での実行も今後サポート予定)
  • unite.vim に依存している
  • ディレクトリにあるテストを一括実行可能
  • 結果は unite インタフェースで表示される。慣れると分かりやすい。
  • vital.vim の spec.vim を fork し改良したものがベース
  • テストを定義するときは、Vim のコマンドを Spec 風に使用する
  • 依存関係の問題は neobundle で解決する予定
  • 足りない機能はまだ多い
  • 保守されている

vital.vim spec.vim

https://github.com/vim-jp/vital.vim/tree/master/spec

  • Author: ujihisa
  • vital.vim 組み込みのテストフレームワーク
  • Spec 系
  • コマンドラインからの実行にのみ対応
  • シンプルだが低機能
  • 依存関係のあるスクリプトに対応するのは大変
  • テストを定義するときは、Vim のコマンドを Spec 風に使用する
  • 他のテストライブラリに置き換わる可能性あり
  • 保守されている?

vim-vspec

https://www.relishapp.com/kana/vim-flavor/docs/testing-vim-plugins

https://github.com/kana/vim-vspec

  • Author: kana

  • Spec 系

  • コマンドラインからの実行にのみ対応

    $ bin/vspec . test/context.input

  • bash に依存

  • Windows での動作は考慮されていない

  • 依存関係のあるプラグインの場合、引数に runtimepath を渡す

  • スクリプトの内部で Vim スクリプトをパースしている

  • テストするための環境を用意するのがやや大変

  • 依存関係の問題は vim-flavor で解決する

  • 保守されている

owl.vim

https://github.com/osyo-manga/vim-owl

http://d.hatena.ne.jp/osyo-manga/20121230/1356873600

  • Author: manga_osyo
  • 独自の構文(OwlCheck, OwlEqual, OwlThrow, ...)
  • s:test_{名前} でテスト用の関数を定義
  • 現在の Vim からの実行にのみ対応
  • 出力は errorformat に対応しており、QuickRun に出力することができる
  • vim-budou, vim-chained に依存
  • 保守されている

zen-coding.vim unittest.vim

https://github.com/mattn/zencoding-vim/blob/master/unittest.vim

  • Author: mattn
  • zen-coding.vim 組み込みのテストフレームワーク
  • zen-coding 専用?
  • query に対する展開結果をテストする
  • 基本的には Vim からの実行専用だが、.vimrc を用意すれば単体での起動も可能
  • 複雑なキー入力のテストにも対応しているのが特徴
  • 保守されている?

unite-giti test.vim

https://github.com/kmnk/vim-unite-giti/tree/master/test

  • Author: kmnk
  • unite-giti 組み込みのテストフレームワーク
  • unite-giti 専用
  • 内部では vim-unittest を使用している
  • テスト用オブジェクトを生成することでテストを行う
  • mock を用意することで UI が複雑な unite フレームワークのテストを可能としている
  • UI のテストの参考となる
  • 基本的には Vim からの実行専用だが、.vimrc を用意すれば単体での起動も可能

vimtest

https://github.com/kannokanno/vimtest

http://d.hatena.ne.jp/kanno_kanno/20120401/1333259169

  • Author: kanno_kanno
  • Unit 系
  • 現在の Vim からの実行にのみ対応
  • Assert には関数を使う
  • テスト用のオブジェクトを生成してテスト
  • 専用の出力バッファにテスト結果を出力する
  • QuickRun との連携に対応している
  • 異常系のテストには未対応
  • ディレクトリにあるテストを一括実行可能
  • 自動的に実装コードを再読み込みする
  • テスト失敗時のみ QuickFix を開く機能
  • 保守されている
  • ドキュメントがしっかりしている(ただし日本語のみ)

SimpleTap

https://github.com/tyru/simpletap.vim

  • Author: tyru
  • TAP 系の出力とインタフェース
  • 現在の Vim からの実行が基本だが、コマンドラインからの実行も可能
  • 本体の依存関係を解決するため、コマンドラインからの実行でも現在の.vimrcを読む。副作用問題は解決できない
  • 依存関係を簡単に記述する方法はない
  • ディレクトリにあるテストを一括実行可能
  • Windows 対応
  • ドキュメント未完成
  • openbuf.vim, vice.vim に依存
  • 保守されている

runVimTests

http://www.vim.org/scripts/script.php?script_id=2565

http://d.hatena.ne.jp/ampmmn/20090517/1242513424

  • Author: Ingo Kakat

  • TAP 系?

  • コマンドラインからの実行にのみ対応

    runVimTests [オプション] <テスト対象>

  • 豊富な実行オプション

  • オプションが複雑なので、シェルスクリプト(バッチファイル)必須

  • 自身では、Assert 用のマクロは持っていない

  • バッファの内容の検査をするための ok ファイル、echo 出力用の msgok ファイル

  • Vim 本体のテストコードに近い?

  • VimTAP に依存

  • Mac 環境では動かなかったという報告あり

  • 保守されている

VimTAP

http://www.vim.org/scripts/script.php?script_id=2213

  • TAP 系
  • コマンドラインからの実行にのみ対応
  • runtimepath を指定できるので、依存関係も(一応)指定できる
  • Windows には対応していない
  • 保守されているが、更新は少ない

vimUnit

http://www.vim.org/scripts/script.php?script_id=1125

https://github.com/dsummersl/vimunit (fork版)

  • Author: Staale Flock
  • Unit 系テストフレームワーク
  • 初期バージョン以降更新されていない
  • Todo が目立つ
  • ドキュメントが不十分、サンプルがない
  • 専用の Assert 関数を呼び出してテストする
  • 保守されていない(fork版は保守されている)

tAssert

http://www.vim.org/scripts/script.php?script_id=1730 https://github.com/tomtom/tassert_vim

  • Assert 系独自構文
  • Assert のログ記録が主で、他のテストフレームワークとは少し毛色が異なる
  • 現在の Vim からの実行にのみ対応
  • 一部機能は spec.vim に依存
  • 保守されていない?

spec.vim

https://github.com/tomtom/spec_vim

  • Author: Tom Link
  • Spec 系テストフレームワーク
  • 現在の Vim からの実行にのみ対応
  • SpecBegin で読み出すスクリプトを指定する
  • Should be で同一性のテスト
  • Should throw で例外のテスト
  • 関数とコマンドの両方に対応している
  • Spec 系テストフレームワークの設計には参考になる
  • 保守されている

UT

https://github.com/intuited/lh-vim-ut https://github.com/intuited/lh-vim-lib

  • Author: Luc Hermitte
  • 独自構文の Assert 系テストフレームワーク
  • 現在の Vim からの実行にのみ対応
  • テスト関数は s:Test もしくは s:test で開始する
  • テスト結果は QuickFix に出力される
  • エラー時のメッセージが少ない
  • 一部バグがある?
  • 保守されていない

vim-unittest

https://github.com/h1mesuke/vim-unittest

  • Author: h1mesuke
  • Unit 系に似た独自の Assert 系構文
  • Assert には専用の関数を使用する
  • 現在の Vim からの実行、コマンドラインからの実行の両方に対応
  • コマンドラインから実行する場合、bash が必須
  • テストでスクリプトローカル変数にアクセスするには工夫が必要
  • テスト結果は専用のバッファもしくはファイルに出力される
  • Vim script に特化した比較関数
  • テストのために、専用のオブジェクトを生成する
  • ドキュメントが充実
  • 保守されていない

参考資料

...