美文网首页
Golang测试

Golang测试

作者: lkzy | 来源:发表于2019-11-22 09:20 被阅读0次

    如何编写好的单元测试

    单元测试主要有两个方面:

    • 编写测试方法

    • 编写可测试代码

    编写单元测试方法

    单元测试特定案例的方法

    编写更好的单元测试的技巧

    编写单元测试不仅仅是“assert(func()==expected)”

    编写可测试代码

    如何编写易于测试的代码,测试驱动开发、正确使用设计模式等

    编写可以很好地测试的代码编写好的单元测试一样重要

    将现有代码重写为可测试代码虽然痛苦,但是是值得的

    Go测试概述

    测试一般使用标准库:testing

    测试代码文件和正式代码文件应处于一个文件夹下,测试代码文件应以_test.go结尾

    要注意测试文件名不能以_.开始,否者go test将不会包含这些文件

    测试方法也有特殊的格式,应以Test开头,参数类型需为*testing.T

    go test的测试完整指令

    go test [build/test flags] [packages] [build/test flags & test binary flags]

    常用的flag

    • -bench regexp:性能测试,支持表达式对测试函数进行筛选。-bench .则是对所有的benchmark函数测试

    • -benchmem:性能测试的时候显示测试函数的内存分配的统计信息

    • -count n:运行测试或基准测试多少次,默认一次

    • -run regexp:只运行特定的测试函数, 比如-run ABC只测试函数名中包含ABC的测试函数

    • -timeout t:测试时间如果超过t, panic,默认10分钟

    • -cover:统计测试覆盖率

    • -v:显示测试的详细信息,也会把LogLogf方法的日志显示出来

    • -failfast:测试将在第一个失败即结束

    go test常用的指令

    go test PACKAGE_NAME测试指定的package,文件的package必须为PACKAGE_NAME

    go test .执行当前文件夹下所有文件的测试

    go test ./...执行当前文件夹下所有文件及文件夹的测试

    测试覆盖率

    从 Go 1.2开始, Go就提供了一个生成代码覆盖率的工具cover

    代码覆盖率描述了包中代码有多少语句被测试所覆盖。

    指令:

    go test -cover [package]

    子测试(SubTest)

    使用testing包下的func (t *T) Run(name string, f func(t *T)) bool方法进行子测试,在一个测试方法中进行多个用例的的测试。

    使用指令:

    go test -run=[TestMethod]/[SubTestName]

    可以指定运行某个子测试

    例如:

    func TestAdd(t *testing.T) {
      a := 1
    
      t.Run(“+1”, func(t *testing.T) {
         if a + 1 != 2 { t.Fatal("fail!") }
      })
      t.Run(“+2”, func(t *testing.T) {
        if a + 2 != 3 { t.Fatal("fail!") }
      })
    }
    

    可以使用:

    $ go test -run=TestAdd/+1
    

    运行TestAdd测试方法下+1的子测试

    标签(Tags)

    用于为测试文件分类,通过指定标签,可以指定测试哪些测试文件

    为测试文件打标签

    // +build add
    
    package person
    
    import (
        "testing"
    )
    
    // Snipped...
    

    在测试中使用标签

    $ go test -tags=add -v
    

    Short模式

    使用-shortflag可以跳过测试代码中被指定为Short模式的测试代码

    指定测试方法为short模式

    func TestSkip(t *testing.T) {
        if testing.Short() {
            t.Skip("Skipping long-running test.")
        }
        //Snipped
    }
    

    使用

    $go test ./... -short -v
    

    跳过Short模式的测试

    TDT

    TDT也叫表格驱动方法,有时也被归为关键字驱动测试(keyword-driven testing),是针对自动化测试的软件测试方法,它将创建测试程序的步骤分为规划及实现二个阶段。

    相关文章

      网友评论

          本文标题:Golang测试

          本文链接:https://www.haomeiwen.com/subject/iuvxwctx.html