《Go程序设计语言》- 第11章:测试

前言

本专栏是笔者在学习《Go程序设计语言》这本书时,对每个章节认为较为重要容易忘记👻)的知识点记录的笔记,其中也会有少量的思考👀, 现整理成博客分享出来。

如果对专栏感兴趣,跑过去看一眼,书中的每一章都有:《Go程序设计语言》笔记

❗️注意❗️:本专栏不是详细的知识讲解,只是碎片的知识条目,或可作为Go知识点查漏补缺的小工具~

go test工具

  1. Go的测试方法看起来比较低级,依赖于go test命令,和一些能有该工具运行的测试函数编写约定;
  2. 包目录中以_test.go结尾的文件不是go build编译的目标,而是go test编译的目标;
  3. *_test.go文件中有三种特殊函数:功能测试函数、基准测试函数、示例函数
  4. 功能测试函数以Test为前缀,检测运行结果并报告PASS或者FAIL
  5. 基准测试函数以Benchmark开头,用来测试性能,执行多次后输出平均执行时间;
  6. 示例函数以Example开头,用来提供机器检查过的文档;
  7. go test工具扫描*_test.go文件,寻找其中的特殊函数,生成一个临时的main包来调用他们,编译运行打印结果,最后清空临时文件;

Test函数

  1. 每一个测试文件必须导入testing包,且测试函数签名如下,其中参数t提供了t.Error()方法以汇报测试失败和日志记录功能;

    func TestName(t *testing.T){
        
    }
    
  2. 测试函数名必须以大写开头,如TestmyFunc是错误的;

  3. go test -v可以报告每个测试的耗时;

  4. 可以使用基于表的测试用例:

    var tests = []struct{
        input string
        res bool
    }{
        {"ok input", true},
        {"error input", false}
    }
    
  5. 测试错误消息的格式一般是:f(x)=y, want z

  6. 随机测试:使用函数生成一定格式生成预知结果的随机输入;大概率用到math/rand包;

覆盖率

  1. Dijkstra测试旨在发现bug,而不是证明其不存在
  2. go test -cover可以查看测试覆盖率情况;输出每条语句的执行情况;

Benchmark函数

  1. 基准测试函数使用如下声明:

    func BenchmarkMyTest(b *testing.B){
        ...
    }
    
  2. testing.B除了提供错误输出函数之外,还提供b.N获取被执行的次数;

  3. go test默认不会执行任何基准测试,而需要使用go test -bench=Test来指定函数;

性能剖析

  1. 过早优化是万恶之源

  2. 性能剖析分为很多种:CPU性能剖析、堆性能剖析、阻塞性能剖析;可通过如下语句引入:

    go test -cpuprofile cpu.out
    go test -memprofile mem.out
    go test -blockprofile block.out
    

Example函数

  1. 声明是没有参数也没有返回值:

    func ExampleTest(){
        
    }
    
  2. 主要目的是作为文档,其次可用于Go Playground,在网页上编辑和运行每个示例函数;


如有错误 ❌ ,欢迎指正 ☝️~

如有收获 🍗,可以考虑点赞👍/评论💬/收藏⭐️/关注👀,大家共同进步~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值