Go:测试

1、go test

  1. 在包目录内,所有以 _test.go为后缀名的源文件并不是go build构建包的一部分,它们是go test测试的一部分。

  2. 三种测试函数

    • 测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用 这些测试函数并报告测试结果是PASS或FAIL。
    • 基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;go test命令会多次运行基准函数以计算一个平均的执行时间。
    • 示例函数是以Example为函数名前缀的函数,提供一个由编译器保证正确性的示例文档。
  3. go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,然后生成一个临时的 main包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件

2、测试函数

  1. 测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头,如下:
    	func TestName(t *testing.T) 
    	{
    	 	// ...
    	}
    
  2. t参数用于报告测试失败和附加的日志信息
  3. go test 命令如果没有参数指定包那么将默认采用当前目录对应的包(和 go build 命令一 样)。
  4. 测试失败的信息一般的形式是“f(x) = y, want z”,其中f(x)解释了失败的操作和对应的输出,y 是实际的运行结果,z是期望的正确的结果。
  5. mock函数的写法,其实这边直接在test函数里面对函数进行修改就可以了,但是为了保证运行之后其他保持函数本来的面目,这边加上defer来保证测试类测试完成返回,函数不变,具体写法:
    	func TestCheckQuotaNotifiesUser(t *testing.T) {
    		saved := fucToTest //先保存一下函数中要被Mock的某个方法 	
    		defer func() { fucToTest = saved }()  //测试类运行完以后要把函数还原回去
    		// Install the test's fake notifyUser. 
    		fucToTest = func(user, msg string) {		
    			 //重写函数 .......
    		}
    		// ...rest of test... 
    	}	
    

3、测试覆盖率

参考原文

4、基准测试

  1. 基准测试函数和普通测试 函数写法类似,但是以Benchmark为前缀名,并且带有一个 *testing.B 类型的参 数;
  2. *testing.B 参数除了提供和 *testing.T 类似的方法,还有额外一些和性能测量相关的方法。它还提供了一个整数N,用于指定操作执行的循环次数。
  3. 我们需要通过 -bench 命令行标志参数手工指定要运行的基准测试函数。该参数是一个正则表 达式,用于匹配要执行的基准测试函数的名字,默认值是空的。其中“.”模式将可以匹配所有 基准测试函数:
    	go test -bench=.
    
发布了117 篇原创文章 · 获赞 15 · 访问量 5624

猜你喜欢

转载自blog.csdn.net/qq_34326321/article/details/104701608