Vim Unit Test Plugin


Vim 单元测试插件

本文介绍一款可以在 vim 中灵活进行单元测试的工具。

需求

对于较大规模的项目而言单元测试是必不可少的。要在 vim 中进行单元测试有很多种方法。比如使用内置终端,自己编写测试脚本,通过asynctasks.vim等。但以上方法均无法做到精确、灵活地测试。比如有 10 个测试文件,共有 100 个测试函数,只想测试第 3 个文件中的第 2 个函数,依靠以上方法会比较困难。

解决方案

vim-test插件是目前最好的选择。该插件最大的优势在于可以精确地指定要测试的内容。该插件不需要安装依赖,因此只要安装插件本身即可。下面是一份简单的配置。

nnoremap <silent><nowait> <space>tn :<C-u>:TestNearest<CR>
nnoremap <silent><nowait> <space>tf :<C-u>:TestFile<CR>
nnoremap <silent><nowait> <space>ts :<C-u>:TestSuite<CR>
nnoremap <silent><nowait> <space>tl :<C-u>:TestLast<CR>
nnoremap <silent><nowait> <space>tg :<C-u>:TestVisit<CR>

let test#strategy = {
            \ 'nearest': 'asyncrun',
            \ 'file':    'asyncrun',
            \ 'suite':   'asyncrun',
            \ 'last':   'asyncrun',
            \}

let g:test#echo_command = 0

该插件有四种测试的选择,分别是测试离光标最近的函数、测试当前文件、测试全部以及重新测试上一次的内容。

strategy决定了测试运行方式以及结果展示形式,设置为asyncrun即在后台异步运行并且自动打开 quickfix 显示结果。这应当是最合适的选项。

一般情况下使用以上配置足以,进一步还可以指定测试工具,为显示以及运行指定设置参数。因此该插件也可以进行性能测试。具体可见其github 主页

优化

vim-test 的配置非常复杂,vim-ultest在该插件的基础上优化了配置并且添加了新功能。

这里给出一份简单的配置。测试结束后行号前会出现测试是否通过的标记。output就是单元测试的具体结果,由于运行结束后自动显示结果效果不佳,于是在这里将其关闭,要看结果时使用快捷键即可。summary是单元测试通过与未通过的结果汇总,并且附带跳转功能。

nnoremap <silent><nowait> <leader>ta :<C-u>:Ultest<CR>
nmap <silent><nowait> <leader>tf <Plug>(ultest-run-file)
nnoremap <silent><nowait> <leader>tn :<C-u>:UltestNearest<CR>
nnoremap <silent><nowait> <leader>tl :<C-u>:UltestLast<CR>
nnoremap <silent><nowait> <leader>ts :<C-u>:UltestStop<CR>
nmap <silent><nowait> <leader>to <Plug>(ultest-output-jump)
nmap <silent><nowait> <leader>tj <Plug>(ultest-summary-jump)
nmap ;j <Plug>(ultest-next-fail)
nmap ;k <Plug>(ultest-prev-fail)

let g:which_key_map2.t ={
            \ 'name' : '+test',
            \ 'a' : 'run all tests',
            \ 'f' : 'run tests in the current file',
            \ 'n' : 'run the test nearest to the cursor',
            \ 'l' : 'run the last test',
            \ 's' : 'stop all tests in the current file',
            \ 'o' : 'show output of the nearest test',
            \ 'j' : 'jump to the summary window',
            \}

let g:ultest_max_threads=8
let g:ultest_use_pty = 1
let g:ultest_summary_height=10
let g:ultest_summary_open="botright split | resize".g:ultest_summary_height
let g:ultest_output_on_run=v:false

vim-ultest插件还带有调试功能,但是配置较为复杂且功能不如vimspector,因此不建议使用。


文章作者: niuiic
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 niuiic !
评论
  目录