前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

作者头像
猫头虎
发布2024-04-08 14:04:30
970
发布2024-04-08 14:04:30
举报
文章被收录于专栏:猫头虎博客专区

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

📄 摘要

大家好,我是猫头虎博主!今天我们来聊聊Go语言中的一个相当酷的特性——Go 1.7中引入的子测试和子基准测试。这个功能不仅让我们的代码更加简洁、易于维护,而且还为我们提供了更精细的控制测试运行的能力。如果你对Go语言或者编程测试感兴趣,那就别错过这篇文章了哦!🐱👀

🚀 引言

在Go 1.7版本中,testing包通过在TB类型上引入了一个Run方法,为我们带来了子测试和子基准测试的创建能力。这个改变不仅优化了失败处理方式,还提供了更细致的命令行控制,以及更加简洁和可维护的代码结构。

📚 正文

📌 表驱动测试基础

在深入了解之前,让我们先看看Go中常见的测试编写方法。通过遍历测试用例切片来实现一系列相关检查:

代码语言:javascript
复制
func TestTime(t *testing.T) {
    testCases := []struct {
        gmt  string
        loc  string
        want string
    }{
        {"12:31", "Europe/Zuri", "13:31"},     // incorrect location name
        {"12:31", "America/New_York", "7:31"}, // should be 07:31
        {"08:08", "Australia/Sydney", "18:08"},
    }
    // ...
}

这种被称为表驱动测试的方法,相比于为每个测试重复相同的代码,减少了代码重复,并简化了添加更多测试用例的过程。

📌 表驱动基准测试

在Go 1.7之前,无法使用相同的表驱动方法进行基准测试。基准测试是测试整个函数的性能,因此遍历基准测试只会将它们作为单个基准测试进行度量。

代码语言:javascript
复制
func BenchmarkAppendFloat(b *testing.B) {
    benchmarks := []struct{
        name    string
        float   float64
        fmt     byte
        prec    int
        bitSize int
    }{
        {"Decimal", 33909, 'g', -1, 64},
        // ...
    }
    // ...
}

Go 1.7中使用Run方法,可以将一组基准测试表达为一个顶级基准测试。

📌 使用子测试进行表驱动测试

Go 1.7还为创建子测试引入了Run方法。这是我们之前示例的使用子测试重写版本:

代码语言:javascript
复制
func TestTime(t *testing.T) {
    // ...
    for _, tc := range testCases {
        t.Run(fmt.Sprintf("%s in %s", tc.gmt, tc.loc), func(t *testing.T) {
            // ...
        })
    }
}
📌 运行特定测试或基准测试

子测试和子基准测试可以通过命令行上的-run-bench标志单独指定。

📌 设置和拆卸

子测试和子基准测试可用于管理公共的设置和拆卸代码。

📌 并行控制

子测试允许对并行性进行细粒度控制。

📌 并行测试组的运行

可以使一组测试彼此并行运行,但不与其他并行测试并行。

📋 表格总结

关键点

描述

表驱动测试

通过遍历测试用例简化测试编写

子测试和子基准测试

Go 1.7引入,允许更精细的测试控制

命令行控制

使用-run和-bench标志精确运行特定测试

设置和拆卸

管理公共代码,确保测试的正确初始化和清理

并行性控制

细粒度的并行测试控制,优化测试性能

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试
    • 📄 摘要
      • 🚀 引言
        • 📚 正文
          • 📌 表驱动测试基础
          • 📌 表驱动基准测试
          • 📌 使用子测试进行表驱动测试
          • 📌 运行特定测试或基准测试
          • 📌 设置和拆卸
          • 📌 并行控制
          • 📌 并行测试组的运行
        • 📋 表格总结
        相关产品与服务
        腾讯云服务器利旧
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档