vmock


Ⅰ. 插件描述

Mock Framework for Vim script

Ⅱ. 基本信息

创建日期:  2013-05-26
使用用户:  1
Github星:  8
插件作者:  kannokanno

Ⅲ. 安装方法

使用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

その他

詳細はヘルプを参照してください。

添加新评论