1.Go:Generate Unit Tests For Functions
使用方法
步骤1.书写函数,如下
// 代码文件 unit.go
package skill
func Add(a, b int) int {
return a + b
}
func Sub(a, b int) int {
return a - b
}
步骤2.创建测试文件 unit_test.go
package skill
如果测试文件已经存在,可以略过
步骤3.快捷键 Ctrl+Shift+P
,选择 Go:Generate Unit Tests For Functions
生成代码如下
func TestAdd(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Add(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Add() = %v, want %v", got, tt.want)
}
})
}
}
func TestSub(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Sub(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Sub() = %v, want %v", got, tt.want)
}
})
}
}
// 补充完整的代码中 TODO:Add test cases
package skill
import (
"testing"
)
func TestAdd(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
{
name: ">0",
args: args{
a: 10,
b: 20,
},
want: 30,
}, {
name: "=0",
args: args{
a: 0,
b: 0,
},
want: 0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Add(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Add() = %v, want %v", got, tt.want)
}
})
}
}
func TestSub(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
{
name: ">0",
args: args{a: 6, b: 3},
want: 3,
},
{
name: "=0",
args: args{a: 3, b: 3},
want: 0,
},
{
name: "<0",
args: args{a: 6, b: 9},
want: -3,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Sub(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Sub() = %v, want %v", got, tt.want)
}
})
}
}
TODO: Add test cases.需要你填写自己的测试用例
不过要值的注意的是,在测试函数中,使用t.Log()函数是不会在终端输出内容的,需要加一个-v
参数:
- 在扩展商店里搜已经安装了的go插件,点击右下角的 设置图标
- 选中扩展设置
- 找到Go:Build Flags,添加
-v
项,如下 这样在执行TestXXX函数的时候,就能在终端输出log的内容了
2.Go:fill Struct
操作步骤
步骤1.书写{}
,光标放到{}
中
步骤2.快捷键Shift+CMD+P
,选择Go:Fill struct
生产代码结果
注意点:由于tests的类型是一个结构体切片[]struct,所以在生成的代码后面需要手动补一个逗号,,按保存就自动格式化代码了
3.Go:Generate Interface Stubs
示例代码
package skill
type Speaker interface {
// Speak speak action
Speak()
}
type Student struct {
}
快捷键Shift+CMD+P
,选择Go:Generate Interface Stubs
生成代码如下
其中生成代码的时候,务必注意光标在 非函数体外
package skill
type Speaker interface {
// Speak speak action
Speak()
}
type Student struct { // Speak speak action
}
func (s *Student) Speak() {
panic("not implemented") // TODO: Implement
}
4.自动增加/删除tag
- 增加命令:Go:Add Tags To Struct Fileds
- 删除命令:Go:Remove Tags From Struct Fileds
选中你要生成tag的字段,执行命令(增加和删除都是同理,需要选中字段,只会执行已选中的字段) - 默认是只生成 json tag,可以自定义。在setting.json,加入go.addTags设置即可
5.Go:Add import
- 一般情况下,保存,自动添加
import
; - 但是有时候vscode在引入同名的包时,会引入错误的包,这种情况主要是本地pkg->mod目录下有了重名的库,vscode无法知道是哪个。
- 这时候需要我们手动引入,执行命令,然后输入包名,从展示列表中选中你想要的回车即可,支持模糊搜索.
查找接口的具体实现
鼠标移到接口定义处
快捷键
CMD+F12
或者右键,选中:
Go to implementations
6.Go:Extract to variable
字段提取主要用于判断条件复杂的场景,如果该条件判断在多个地方使用,最好是抽离出来,提取成一个变量
具体操作步骤:
- 选中需要提取的内容
- 执行命令
- 输入要生成的变量名
- 等待1s,生成代码
7.Go:Extract to function
示例代码
func ExtractFuncTest(a, b, c int) {
if a > 0 {
}
if b > 0 {
}
if c > 0 {
}
}