2

我正在为 Vim 开发一个插件,我想测试它在启动时、用户编辑文件等时的行为是否正确

为此,我想启动一个终端,并将密钥输入其中。我正在考虑从 python 脚本中完成这一切。有没有办法做到这一点?

在伪 python 中,它可能看起来像这样:

#start a terminal. Here konsole
konsole = os.system('konsole --width=200 --height=150')

#start vim in that terminal
konsole.feed_keys("vim\n")
#run the vim function to be tested
konsole.feed_keys(":let my_list = MyVimFunction()\n")
#save the return value to the file system
konsole.feed_keys(":writefile(my_list, '/tmp/result')\n")

#load result into python
with open('/tmp/result', 'r') as myfile:
    data = myfile.read()

#validate the result
assertEqual('expect result', data)
4

2 回答 2

3

我认为您应该使用单元测试在 Vim 中验证插件的核心功能。Vim 插件种类繁多,但大多数都提供了一些额外的映射或命令,供用户调用,它们通常会在缓冲区、输出或打开的窗口中留下一些副作用。这可以从 Vim 内部验证。有多种方法,我的是runVimTests 测试框架;插件页面有几个替代方案的链接。

有了如此覆盖的核心功能,就几乎没有什么可以“交互式”地测试了。(我的意思是诸如忘记调试输出、执行时间过长、显示混乱之类的东西。)由于您通常是 Vim 和您的插件的重度用户,因此主要涵盖了它。


当然,如果您的插件将自己紧密嵌入到 Vim 中(如“XXX IDE”;尽管这通常不受欢迎),您可以考虑使用一些外部测试驱动程序。也许其他人会为一些通用的、终端驱动的测试框架提供指针。我几乎可以肯定这样的存在。

于 2016-11-17T14:16:37.833 回答
2

虽然我正在维护一个允许对 VimL 函数运行单元测试并将结果提供给 quickfix 窗口的插件,但我使用另外几个工具在某些操作后检查缓冲区的状态,甚至从 travis 运行它- > vimrunner+rspec 和 VimFlavour 用于安装依赖项。(我依稀记得一个受vimrunner启发的Python替代品)

它大多运作良好。唉,它使用客户端-服务器功能和:redir(而不是更新的execute()功能)。即使使用 , 也会:silent捕获:redir返回给客户端的噪音。因此,有时我会与因非常奇怪的原因而失败的测试作斗争。我还发现自己插入了一些伪暂停,以确保 Vim 已经完成了对我输入的内容的解释。

您会在我的一些插件中找到使用示例。参见例如lh-bracketslh-cpp测试(.travis.yml文件 +.rspec/目录 + Rakefile+ + 来自vim-UT 的Gemfile一些助手)

于 2016-11-17T15:08:43.453 回答