go语言中单元测试的总结

一、传统的方式对代码测试

在文件中创建一个main的函数

  • 1、传统方式的写法

    package main
    
    import "fmt"
    
    // 定义一个求和的方法
    func sum(n int) int {
          
          
        res := 0
        for i := 0; i <= n; i++ {
          
          
            res += i
        }
        return res
    }
    
    func main() {
          
          
        res := sum(10)
        if res != 55 {
          
          
            fmt.Println("sum求和错误")
        } else {
          
          
            fmt.Println("sum求和正确")
        }
    }
    
  • 2、使用main函数的缺点

    • 不方便,我们需要在main函数中去调用,这样就要去修改main函数,如果项目正在运行中,只能停止项目
    • 不利于管理,当我们测试多个函数或者多个模块的时候,都写在main函数中,不利于我们管理代码,感觉好臃肿
    • 不能对代码性能的检测,不知道函数模块执行的时间

二、go语言中的单元测试

  • 1、介绍

    Go 语言中自带有一个轻量级的测试框架testing 和自带的go test 命令来实现单元测试和性能测试,testing 框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例

  • 2、使用单元测试的优点

    • 确保每个函数是可运行,并且运行结果是正确的
    • 确保写出来的代码性能是好的
    • 单元测试能及时的发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让程序能够在高并发的情况下还能保持稳定。

三、在go语言中单元测试快速入门

  • 1、在刚刚的go代码同级的目录下创建一个xx_test.go的文件

    ├── sum.go // 和上面的代码一样的
    └── sum_test.go
    
  • 2、sum_test.go代码

    package main
    
    import "testing"
    
    func TestSum(t *testing.T) {
          
          
    	res := sum(10)
    	if res != 55 {
          
          
    		t.Fatalf("sum(10)不正确")
    	} else {
          
          
    		t.Logf("sum(10)正确")
    	}
    }
    
  • 3、在命令行运行

    ➜  test git:(master) ✗ go test -v   # 执行的命令
    === RUN   TestSum
    --- PASS: TestSum (0.00s)
        sum_test.go:10: sum(10)正确
    PASS
    ok      github.com/dev/test     0.005s  # 计算出这个方法执行的时间
    ➜  test git:(master) ✗ 
    
    
  • 4、go语言中单元测试的总结

    • 测试用例的文件必须要以fileName_test.go结尾[fileName根据需要测试的文件来写的]

    • 测试用例的函数必须以Test开头,一般来说就是Test+被测试的函数名

    • 测试用例的函数的参数是固定的t *testing.T

    • 一个测试用例中可以有多个测试函数

    • 运行测试用例的指令

      • go test:如果运行正确,无日志输出,错误的时候会输出日志
      • go test -v:运行正确或错误都会输出日志
    • 当出现错误时,可以使用t.Fatalf 来格式化输出错误信息,并退出程序

    • t.Logf 方法可以输出相应的日志

    • PASS表示测试用例运行成功,FAIL表示测试用例运行失败

    • 如果文件夹下有很多文件,你仅仅是要测试单个文件的方法

      go test -v xx_test.go xx.go
      
    • 如果文件中有很多测试用例方法,仅仅是测试一个方法

      go test -v -test.run 测试用例的函数
      

猜你喜欢

转载自blog.csdn.net/kuangshp128/article/details/103731442