我正在维护另一个(纯 Vimscript)UT 插件。
它被记录在案,带有几个示例,我的其他插件也使用它。
它旨在测试函数结果和缓冲区内容,并在快速修复窗口中显示失败。异常调用堆栈也被解码。AFAIK,它是迄今为止唯一(或至少是第一个)旨在填充快速修复窗口的插件。从那时起,我添加了帮助脚本以使用 rspec (+Vimrunner) 生成测试结果
从 v2.0(2020 年 5 月)开始,该插件还可以测试缓冲区内容——在它被映射/片段/...更改之后。直到那时我一直在使用其他插件。例如,我曾经使用 VimRunner+RSpec 在 travis 上测试我的 C++ 片段(来自 lh-cpp)。
关于语法,例如以下
Assert 1 > 2
Assert 1 > 0
Assert s:foo > s:Bar(g:var + 28) / strlen("foobar")
debug AssertTxt (s:foo > s:Bar(g:var+28)
\, s:foo." isn't bigger than s:Bar(".g:var."+28)")
AssertEquals!('a', 'a')
AssertDiffers('a', 'a')
let dict = {}
AssertIs(dict, dict)
AssertIsNot(dict, dict)
AssertMatch('abc', 'a')
AssertRelation(1, '<', 2)
AssertThrows 0 + [0]
会产生:
tests/lh/README.vim|| SUITE <[lh#UT] Demonstrate assertions in README>
tests/lh/README.vim|27 error| assertion failed: 1 > 2
tests/lh/README.vim|31 error| assertion failed: s:foo > s:Bar(g:var + 28) / strlen("foobar")
tests/lh/README.vim|33 error| assertion failed: -1 isn't bigger than s:Bar(5+28)
tests/lh/README.vim|37 error| assertion failed: 'a' is not different from 'a'
tests/lh/README.vim|40 error| assertion failed: {} is not identical to {}
或者,如果我们想测试缓冲区内容
silent! call lh#window#create_window_with('new') " work around possible E36
try
" :SetBufferContent a/file/name.txt
" or
SetBufferContent << trim EOF
1
3
2
EOF
%sort
" AssertBufferMatch a/file/NAME.txt
" or
AssertBufferMatch << trim EOF
1
4
3
EOF
finally
silent bw!
endtry
这导致
tests/lh/README.vim|78 error| assertion failed: Observed buffer does not match Expected reference:
|| ---
|| +++
|| @@ -1,3 +1,3 @@
|| 1
|| -4
|| +2
|| 3
(D
在快速修复窗口中点击将在新选项卡中以差异模式打开生成的结果以及预期结果)