(七)Go测试与性能调优

本文介绍了Go语言的测试规范和性能调优方法,包括功能测试、基准测试和示例测试的编写规则,使用pprof进行性能分析,以及如何测试Http服务器和生成文档。强调了表格驱动测试的优势,探讨了测试流程和代码覆盖率的检查,同时讲解了如何避免缓存影响测试结果。
摘要由CSDN通过智能技术生成

单元测试,它又称程序员测试。顾名思义,这就是程序员们本该做的自我检查工作之一。

在 Go 语言中,一个测试用例往往会由一个或多个测试函数来代表,不过在大多数情况下,每个测试用例仅用一个测试函数就足够了。、

Go 程序编写三类测试,即:

  • 功能测试(test)
  • 基准测试(benchmark,也称性能测试)
  • 示例测试(example)。

测试源码文件的主名称应该以被测源码文件的主名称为前导,并且必须以“_test”为后缀。每个测试源码文件都必须至少包含一个测试函数。

Go测试命名规范

  • 对于功能测试函数来说,其名称必须以Test为前缀,并且参数列表中只应有一个*testing.T类型的参数声明。
  • 对于性能测试函数来说,其名称必须以Benchmark为前缀,并且唯一参数的类型必须是*testing.B类型的。
  • 对于示例测试函数来说,其名称必须以Example为前缀,但对函数的参数列表没有强制规定。

Go测试

传统测试

  • 测试数据和测试逻辑混在一起
  • 出错信息不明确
  • 一旦一个数据出错测试全部结束
@Test public void testAdd() {
   
    assertEquals(3, add(1, 2));
    assertEquals(2, add(0, 2));
    assertEquals(Integer.MIN_VALUE, add(1, Integer.MAX_VALUE));
}

表格驱动测试

  • 分类测试数据和测试逻辑
  • 明确出错信息
  • 可以部分失败
  • Go 语言的语法使得我们更易实践表格驱动测试
test := []struct {
   
    a, b, c int32
}{
   
    {
   1, 2, 3},
    {
   0, 2, 2}.
    {
   math.MaxInt32, 1, math.MinInt32},
}

for _, test := range tests {
   
    if actual := add(test.a, test.b); actual != test.c {
   
        // 打印错误信息
    }
}

测试案例

package test
import "math"
// 测试函数
func Calc(a, b int) int {
   
    c:=int(math.Sqrt(float64(a*a+b*b)))
    return c
}

calc_test.go

package test
import "testing"
func TestCalc(t *testing.T) {
   
    tests:=[]struct{
   a,b,c int }{
   
        {
   3,4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值