通过单元测试解决问题或者调试代码,可以避开错综复杂的依赖关系、直击问题的核心,从而极大地节约时间、提高效率。
但是,当创建测试类成为一个经常发生的操作时,每次都手动创建类、引入基类、添加测试方法就显得很烦琐。我需要这样一个解决方案,让我可以立即开始着手写测试代码。
方案一:文件模板
通过VS Code的插件Template,可以实现把事先准备好的一个测试类文件模板复制到工程目录下。
安装完后,第一次执行Template: Create New
命令会在当前工程根目录下创建文件“template.config.js”和目录“.templates”。
在“.templates”中创建测试类模板文件,例如:
|
|
下次再执行Template的命令或者侧边栏文件管理器中的右键菜单项时,就可以选择该模板了。
Template有个很大的短板,目前的版本还不支持全局模板,每个工程下都维护一套模板还是很烦琐的。
方案二:代码片断
代码片断(以下统称Snippet)可能是VS Code做得最烂的一个功能,我曾无数次泪流满面地回想起有Vim和UltiSnips相伴的美好时光。
解决方案是这样的:
先通过插件File Utils的File: New File Relative to Project Root
命令在工程目录下创建一个空白文件(如AnyTest.php)。然后再通过Snippet快速插入测试类的脚手架代码。
这里有一个问题,VS Code的PHP Snippet只有在<?php
标签之内才能生效,所以如果创建一个针对PHP语言的Snippet,在上面创建的这个空白文件里是无法触发的。
VS Code的Snippet总体上分为工程和通用两类,所谓工程类(Project Snippet Scope),就是只对当前工程生效,存储在工程根目录下的“.vscode”目录中。通用类(Language Snippet Scope)是我们平时最常用的,对所有工程都会生效。它又分为语言和全局两种。语言类(Language Snippet File)是针对具体的语言定义的Snippet集合,文件名为语言名称,后缀是“.json”,如“php.json”。全局类(Global Snippet File)通常是不受限于语言的,当然也可以指定单个Snippet对哪些语言启用,文件名随意,后缀是“.code-snippets”。
因此,测试类脚手架代码的Snippet不能定义在“php.json”中,而应放在“global.code-snippets”里:
|
|
这里通过选项“scope”设定只对“html”和“php”两种语言生效,注意如果只设定“php”也是只能在<?php
标签内才能生效的。