zoukankan      html  css  js  c++  java
  • testing

    testing - 测试基本使用接口

    当你写完一个函数,结构体,main之后,你下一步需要的就是测试了。testing包提供了很简单易用的测试包。

    写一个基本的测试用例#

    测试文件的文件名需要以_test.go为结尾,测试用例需要以TestXxxx的样式存在。

    比如我要测试utils包的sql.go中的函数:

    func GetOne(db *sql.DB, query string, args ...interface{}) (map[string][]byte, error) {
    

    就需要创建一个sql_test.go

    package utils
    
    import (
        "database/sql"
        _ "fmt"
        _ "github.com/go-sql-driver/mysql"
        "strconv"
        "testing"
    )
    
    func Test_GetOne(t *testing.T) {
        db, err := sql.Open("mysql", "root:123.abc@tcp(192.168.33.10:3306)/test")
        defer func() {
            db.Close()
        }()
        if err != nil {
            t.Fatal(err)
        }
    
        // 测试empty
        car_brand, err := GetOne(db, "select * from user where id = 999999")
        if (car_brand != nil) || (err != nil) {
            t.Fatal("emtpy测试错误")
        }
    }
    

    testing的测试用例形式#

    测试用例有四种形式:
    TestXxxx(t *testing.T) // 基本测试用例
    BenchmarkXxxx(b *testing.B) // 压力测试的测试用例
    Example_Xxx() // 测试控制台输出的例子
    TestMain(m *testing.M) // 测试Main函数

    给个Example的例子:(Example需要在最后用注释的方式确认控制台输出和预期是不是一致的)

    func Example_GetScore() {
        score := getScore(100, 100, 100, 2.1)
        fmt.Println(score)
        // Output:
        // 31.1
    }
    

    testing的变量#

    gotest的变量有这些:

    • test.short : 一个快速测试的标记,在测试用例中可以使用testing.Short()来绕开一些测试
    • test.outputdir : 输出目录
    • test.coverprofile : 测试覆盖率参数,指定输出文件
    • test.run : 指定正则来运行某个/某些测试用例
    • test.memprofile : 内存分析参数,指定输出文件
    • test.memprofilerate : 内存分析参数,内存分析的抽样率
    • test.cpuprofile : cpu分析输出参数,为空则不做cpu分析
    • test.blockprofile : 阻塞事件的分析参数,指定输出文件
    • test.blockprofilerate : 阻塞事件的分析参数,指定抽样频率
    • test.timeout : 超时时间
    • test.cpu : 指定cpu数量
    • test.parallel : 指定运行测试用例的并行数

    testing包内的结构#

    • B : 压力测试
    • BenchmarkResult : 压力测试结果
    • Cover : 代码覆盖率相关结构体
    • CoverBlock : 代码覆盖率相关结构体
    • InternalBenchmark : 内部使用的结构
    • InternalExample : 内部使用的结构
    • InternalTest : 内部使用的结构
    • M : main测试使用的结构
    • PB : Parallel benchmarks 并行测试使用结果
    • T : 普通测试用例
    • TB : 测试用例的接口

    testing的通用方法#

    T结构内部是继承自common结构,common结构提供集中方法,是我们经常会用到的:

    当我们遇到一个断言错误的时候,我们就会判断这个测试用例失败,就会使用到:

    Fail  : case失败,测试用例继续
    FailedNow : case失败,测试用例中断
    

    当我们遇到一个断言错误,只希望跳过这个错误,但是不希望标示测试用例失败,会使用到:

    SkipNow : case跳过,测试用例不继续
    

    当我们只希望在一个地方打印出信息,我们会用到:

    Log : 输出信息
    Logf : 输出有format的信息
    

    当我们希望跳过这个用例,并且打印出信息:

    Skip : Log + SkipNow
    Skipf : Logf + SkipNow
    

    当我们希望断言失败的时候,测试用例失败,打印出必要的信息,但是测试用例继续:

    Error : Log + Fail
    Errorf : Logf + Fail
    

    当我们希望断言失败的时候,测试用例失败,打印出必要的信息,测试用例中断:

    Fatal : Log + FailNow
    Fatalf : Logf + FailNow
  • 相关阅读:
    python之用循环实现五子棋小程序
    python实现百钱买百鸡
    逻辑综合工具DesignCompiler使用教程
    塑料封装可靠性问题浅析
    python发展历程
    Python02期预科课程笔记索引
    python之虚拟环境
    linux 的IP配置和网络问题的排查
    appache等的安装笔记x32
    4 计算1到100的和
  • 原文地址:https://www.cnblogs.com/yjf512/p/4237077.html
Copyright © 2011-2022 走看看