Ⅰ. 插件描述
Mock Framework for Vim scriptⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'kannokanno/vmock'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'kannokanno/vmock'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'kannokanno/vmock'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/kannokanno/vmock
Ⅳ. 文档说明
# VMock
Vim scriptテスト用のモックライブラリです。
次のような記述で使用します。
call vmock#mock('SomeGlobalFunc').with(arg1, arg2).return(items).once()依存
必須なものはありません。
連携できるテストフレームワーク
使い方
モック作成
関数名かFuncrefを指定することで対象のモックを作成します。
グローバル関数
let mock = vmock#mock('SomeGlobalFunc')autoload関数
let mock = vmock#mock('some_plugin#func')辞書関数
let mock = vmock#mock('SomeDict.func')Funcref
let mock = vmock#mock(function('SomeGlobalFunc'))スクリプトローカルな関数
スクリプトローカルな関数はモック化できません。
戻り値の指定
モックの return() を使うことにより戻り値の指定ができます。
call vmock#mock('SomeGlobalFunc').return(100)or
let mock = vmock#mock('SomeGlobalFunc')
call mock.return(100)引数の検証
モックの with() を使うことにより引数の検証ができます。
call vmock#mock('SomeGlobalFunc').with('SomeArg')or
let mock = vmock#mock('SomeGlobalFunc')
call mock.with('SomeArg')値を直接指定した場合は ==# による検証が行われます。
その他の引数Matcherについてはヘルプを参照してください。
呼び出し回数の検証
特定のモックAPIを使うことにより呼び出し回数の検証ができます。
call vmock#mock('SomeGlobalFunc').once()or
let mock = vmock#mock('SomeGlobalFunc')
call mock.once()その他の回数Matcherについてはヘルプを参照してください。
単体でVMockを使う場合
本来は他のテストプラグインと連携して使うことを目的としていますが、VMock単体でも利用可能です。
単体で使う場合は以下の条件を守る必要があります。
- モック検証のために
call vmock#verify()を記述する - モック作成 ~ 検証までをtry文で囲う
finally句で
call vmock#clear()を記述する- clear()を呼ばないと元の関数定義を復元出来ません
以下はmattn/webapi-vimに対するモックの例です。
なお、このコードの全体は vmock/example/webapi-vim にあります。
" expected data
let items = [s:make_item('Title-1', 'http://localhost/hoge'),
\ s:make_item('Title-2', 'http://localhost/piyo'),
\ s:make_item('Title-3', 'http://localhost/fuga')]
let url = 'http://rss.slashdot.org/Slashdot/slashdot'
try
call vmock#mock('webapi#feed#parseURL').with(url).return(items).once()
let feeds = s:read_feed(url)
call s:assert(len(items), len(feeds))
call s:assert(items[0], feeds[0])
call s:assert(items[1], feeds[1])
call s:assert(items[2], feeds[2])
call vmock#verify()
catch
echoerr v:exception
finally
call vmock#clear()
endtry開発者向け - 単体テストについて
vmockのテストにはvim-themisが使われています。
実行例は以下の通り。
$ <themisの実行コマンド> --runtimepath <vmockのルートディレクトリ> -r <テスト対象のパス>
# sample
$ pwd
/Users/kanno/tmp/vmock
$ ~/.vim/bundle/vim-themis/bin/themis --runtimepath ~/tmp/vmock -r testその他
詳細はヘルプを参照してください。