03.vscode技巧2

1.Go:Generate Unit Tests For Functions

03.vscode技巧2
使用方法
步骤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项,如下 03.vscode技巧2 这样在执行TestXXX函数的时候,就能在终端输出log的内容了 03.vscode技巧203.vscode技巧2

2.Go:fill Struct

操作步骤

步骤1.书写{},光标放到{}

03.vscode技巧2

步骤2.快捷键Shift+CMD+P,选择Go:Fill struct

03.vscode技巧2
生产代码结果
03.vscode技巧2
注意点:由于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
03.vscode技巧2
03.vscode技巧2
03.vscode技巧2
生成代码如下
其中生成代码的时候,务必注意光标在 非函数体外

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无法知道是哪个。
  • 这时候需要我们手动引入,执行命令,然后输入包名,从展示列表中选中你想要的回车即可,支持模糊搜索.

查找接口的具体实现

  • 鼠标移到接口定义处
    03.vscode技巧2

  • 快捷键CMD+F12
    03.vscode技巧2

  • 或者右键,选中:Go to implementations
    03.vscode技巧2
    03.vscode技巧2

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 {
    }
}

03.vscode技巧2
03.vscode技巧2
03.vscode技巧2
03.vscode技巧2
03.vscode技巧2

8.

上一篇:sql server 镜像操作


下一篇:Go单元测试 13