• Go语言:使用简单的 for 迭代语句进行 TDD 驱动测试开发与 benchmark 基准测试


    2023-03-29 更新

    经过一段时间的学习与实践,针对 Golang 语言基础的 TDD 驱动开发测试训练已经告一段落,接下来会在此基础上继续使用 TDD 来构建应用程序 。

    博主前一部分的代码Github先贴下面👇以供参考

    https://github.com/slowlydance2me/My_Golang_Study.git

     
     
    在 Go 中 for 用来循环和迭代,
    Go 语言没有 whiledountil 这几个关键字,我们只能使用 for。这也算是件好事!
    让我们来为一个重复字符 5 次的函数编写测试。

    先编写测试用例

    复制代码
    package iteration
    
    import "testing"
    
    func TestRepeat(t *testing.T) {
        repeated := Repeat("a")
        expected := "aaaaa"
    
        if repeated != expected {
            t.Errorf("expected '%q' but got '%q'", expected, repeated)
        }
    }
    复制代码

    先使用最少的代码来让测试先跑起来

    package iteration
    
    func Repeat(character string) string {
        return ""
    }

     

     把代码补充完整,使得它能够通过测试

    复制代码
    func Repeat(character string) string {
        var repeated string
        for i := 0; i < 5; i++ {
            repeated = repeated + character
        }
        return repeated
    }
    复制代码

    就像大多数类 C 的语言一样,for 语法很不起眼。

    与其它语言如 C,Java 或 JavaScript 不同,在 Go 中 for 语句前导条件部分并没有圆括号,而且大括号 { } 是必须的。你可能会好奇下面这行

        var repeated string

    我们目前都是使用 := 来声明和初始化变量。然后 := 只是简写(简短模式定义看这里👉GO语言学习笔记-类型篇 Study for Go! Chapter one - Type。这里我们使用显式的版本来声明一个 string 类型的变量。我们还可以使用 var 来声明函数,稍后我们将看到这一点

    运行测试应该是通过的

     

    重构

    现在是时候重构并引入另一个构造(construct)+= 赋值运算符。

    复制代码
    const repeatCount = 5
    
    func Repeat(character string) string {
        var repeated string
        for i := 0; i < repeatCount; i++ {
            repeated += character
        }
        return repeated
    }
    复制代码

    += 是自增赋值运算符(Add AND assignment operator),它把运算符右边的值加到左边并重新赋值给左边。

    它在其它类型也可以使用,比如整数类型。

     

    基准测试

    在 Go 中编写基准测试(benchmarks)是该语言的另一个一级特性,它与编写测试非常相似。

    func BenchmarkRepeat(b *testing.B) {
        for i := 0; i < b.N; i++ {
            Repeat("a")
        }
    }

    你会看到上面的代码和写测试差不多。

    testing.B 可使你访问隐性命名(cryptically named)b.N

    基准测试运行时,代码会运行 b.N 次,并测量需要多长时间。
    代码运行的次数不会对你产生影响,测试框架会选择一个它所认为的最佳值,以便让你获得更合理的结果。
     
    go test -bench=. 来运行基准测试。 (如果在 Windows Powershell 环境下使用 go test -bench=".")

     

    以上结果说明运行一次这个函数需要  109 纳秒(在我的电脑上)。这挺不错的,为了测试它运行了 10294568 次

    注意:基准测试默认是顺序运行的。

     

     

     

    以上


    __EOF__

  • 本文作者: slowlydance2me
  • 本文链接: https://www.cnblogs.com/slowlydance2me/p/17232808.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    面试知识点
    [附源码]JAVA毕业设计高校学生社团管理(系统+LW)
    Neuron Newsletter 2022-07|新增非 A11 驱动、即将支持 OPC DA
    需求解析思路
    OpenCV机器视觉-图片卷积
    现在玩51单片机,这也太LOW了?
    c#程序调用c++开发dll库
    Python数组处理
    linux线程互斥锁
    十三、DataFrame表格型数据结构
  • 原文地址:https://www.cnblogs.com/slowlydance2me/p/17232808.html