如何将密钥输入终端以进行单元测试

时间:2016-11-17 13:48:22

标签: python unit-testing vim terminal konsole

我正在为Vim开发一个插件,我想在用户编辑e.t.c文件时测试它在启动时的行为是否正常。

要做到这一点,我想启动一个终端,然后输入密钥。 我正在考虑从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)

2 个答案:

答案 0 :(得分:3)

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

由于涵盖了核心功能,因此没有什么可以交互式地进行测试"。 (我的意思是忘记了调试输出,执行时间过长,显示混乱。)因为你自己通常是Vim和你自己的插件的重度用户,所以大多数都会覆盖它。

当然,如果你的插件紧紧地嵌入到Vim中(就像"用于XXX和#34的IDE ;;虽然这通常不赞成),你可以考虑一些外部测试驱动程序。也许其他人会为一些通用的,终端驱动的测试框架做出贡献。我几乎肯定这样存在。

答案 1 :(得分:2)

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

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

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