• Go中的单元测试和基准测试


    单元测试:测试程序在各种数据下的准确性

    基准测试(压力测试):测试程序的速度及弹性

    testing包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能

    测试文件必须满足 *_test.go这种格式*代表源文件的名字(测试代码和业务代码分开了)

    _test程序不会被普通的Go编译器编译。只有gotest会编译所有的程序(普通和测试)
    测试文件(测试源代码)中必须导入import testiong
    测试函数必须以TestZzz为格式(Zzz是函数名,如TestAdd(t *testing.T))
    T是传给测试函数的结构类型,用来管理测试状态,支持格式化测试日志,t.Log,t.Error,t.ErrorF

    以下函数用来通知测试失败:
    func (t *T)Fail()//标记为失败,并继续执行
    func (t *T) FailNow()//标记为失败并终止此文件的执行,继续下一个文件
    func (t *T) Log(args ...interface{})//args 被用默认的格式格式化并打印到错误日志。
    func (t *T) Fatal(args ...interface{})//先执行第三个,在执行第二个(上面两个的综合)

    go test来编译测试程序,并执行程序中所有的TestZzz函数,所有的测试都通过会打印出PASS
    gotest可以接收多个go文件作为参数,并指定选项。结合 --chatty或-v选项,每个执行的测试函数以及测试状态会被打印。
    例如 go test fmt_test.go --chatty

    testing包中有一些类型和函数可以用来做简单的基准测试:测试代码中必须包含BenchmarkZzz
    以Benchmark开头,并接收一个 *testing.B的类型的参数

    go test -test.bench=.* 会运行所有的基准测试函数。(代码中的函数会被调用N次,并展示N的值和函数执行的平均时间,单位为ns。如果使用testing.Benchmark调用这些函数,只会直接运行)

    package even
    import "testing"
    func TestEven(t *testing.T){

    for num := 0;num <=100 ;num++ {
    if Even(num){
    t.Log("is a Even")
    }else {
    t.FailNow()
    }
    }

    }
    func TestOdd(t *testing.T){
    for num := 0;num<= 100 ;num++{
    if Odd(num){
    t.Log("is a odd")
    }else {
    t.Log("is.t a odd")
    }
    }
    }

    package even

    func Even(i int)bool{

    if i%2 == 0 {
    return true
    } else {
    return false
    }
    }
    func Odd(i int)bool{
    if i%2 == 0{
    return false
    }else {
    return true
    }
    }

    单元测试:
    对于测试程序来说,go test 包名 会直接运行包内所有的_test.go文件,以及这些文件各自所含有的TestXxx函数。(注意是自动执行,相当于执行主函数一样,执行结束之后转而执行下一个。类似于主函数吧。并在控制台打印函数里要打印的。注意,不需要主函数,这是个测试框架testing)

    基准测试:
    func BenchmarkEven(b *testing.B){

    for num := 0;num <=100 ;num++ {
    num := 101
    Even(num)
    fmt.Println("asdf")
    }

    }
    func BenchmarkOdd(b *testing.B){
    num := 100
    Odd(num)
    fmt.Println("asdfasdf")
    }

  • 相关阅读:
    类型检查-类型表达式:类型系统是一种逻辑系统
    计算机程序是建立在计算机硬件和一系列规则、协议、规范、算法基础之上的;
    类型的基石:数据类型、函数类型
    类型安全
    类型检查-类型系统
    动态类型-类型绑定
    类型安全与类型检查是什么?
    怎样写一个新编程语言
    同名的cookie会不会存在多个
    php array_map与array_walk使用对比
  • 原文地址:https://www.cnblogs.com/mcmx/p/11390891.html
Copyright © 2020-2023  润新知