gotests:一个高效编写测试用例的工具

gotests:一个高效编写测试用例的工具

前言

在开发中,为了提升代码质量,经常我们需要编写单元测试。gotests是一个提升编码效率的工具,可以自动生成Go代码的单元测试,减少我们手动编写测试的工作量。

gotests 来自于官方的介绍

gotests使编写 Go 测试变得容易。它是一个 Golang 命令行工具,可根据目标源文件的函数和方法签名生成表驱动测试。测试文件中的任何新依赖项都会自动导入。

安装

这里我们使用[go get]安装和更新:

 go get -u github.com/cweill/gotests/...

安装完成,我们可以使用

 gotests -h

来查看gotests的usage和options

 gotests -h
Usage of gotests:
  -all 为所有函数和方法生成测试
  -excl string regexp。为不需要的函数和方法生成测试匹配。优先于-only、-exported和-all
  -exported  为导出的函数和方法生成测试。需要    优先于-only和-all      
  -i  在错误消息中打印测试输入 
  -only  regexp。为只匹配的函数和方法生成测试。 优先于-all
  -nosubtests>= Go 1.7时禁用子测试生成
  -parallel>= Go 1.7时启用并行子测试生成。
  -w   将输出写入(测试)文件而不是标准输出
  -template_dir  包含自定义测试代码模板的目录的路径。需要 优先于-template。这也可以通过环境设置
    变量GOTESTS_TEMPLATE_DIR
  -template  指定自定义测试代码模板,例如:作证。这也可以
    通过环境变量GOTESTS_TEMPLATE设置
  -template_params 使用stdin从json中读取外部参数到模板
  -template_params_file string    通过json与file读取外部参数到模板

生成测试代码
gotests可以为特定源文件或整个目录生成 Go 测试。默认情况下,它将输出打印到stdout。 我们以一个简单是数学加减乘除法为例,演示如何使用gotests命令来自动生成测试代码。 在workspace/目录下,创建xmath.go

package xmath

func Add(a, b int) int {
    return a + b
}

func Subtract(a, b int) int {
    return a - b
}

func Multiply(a, b int) int {
    return a * b
}

func Divide(a, b int) int {
    return a / b
}
在目录下,并运行以下命令:

gotests -all xmath.go
输出如下:

gotests -all xmath.go          
Generated TestMultiply
Generated TestDivide        
package xmath               
                            
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.
        }
        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 TestSubtract(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 := Subtract(tt.args.a, tt.args.b); got != tt.want {
                                t.Errorf("Subtract() = %v, want %v", got, tt.want)
                        }
                })
        }
}

func TestMultiply(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 := Multiply(tt.args.a, tt.args.b); got != tt.want {
                                t.Errorf("Multiply() = %v, want %v", got, tt.want)
                        }
                })
        }
}

func TestDivide(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 := Divide(tt.args.a, tt.args.b); got != tt.want {
                                t.Errorf("Divide() = %v, want %v", got, tt.want)
                        }
                })
        }
}

上例中,stdout输出了每个函数和方法对应的测试用例,当然,我们可以将其保存到xmath_test.go中。我们可以通过-w 来实现,详细的命令如下:

gotests -all -w .\xmath.go

执行后你将在workspace下,生成xmath_test.go,内容和stdout的内容一致。

更多的options的使用可以参考 github.com/cweill/gotests

Goland IDE下使用

Goland可以通过快捷键ctrl+shift+T, 或者右键生成测试用例 在这里插入图片描述

在这里插入图片描述
同样,会在目录下生成xmath_test.go
在这里插入图片描述

总结
文中简介了gotests工具,其可以自动生成生成代码的单元测试,避免重复的工作量,提升编码效率。并通过一个的生成go单元测试的例子,演示了如何入门使用。另外在Goland IDE中,可以通过Tests for package也可以快速生成单元测试。

注:内容转载于:https://juejin.cn/post/7315591545741230117
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值