博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go Main测试实现原理剖析
阅读量:6264 次
发布时间:2019-06-22

本文共 1120 字,大约阅读时间需要 3 分钟。

  hot3.png

简介

每一种测试(单元测试、性能测试或示例测试),都有一个数据类型与其对应。

  • 单元测试:InternalTest
  • 性能测试:InternalBenchmark
  • 示例测试:InternalExample

测试编译阶段,每个测试都会被放到指定类型的切片中,测试执行时,这些测试将会被放到testing.M数据结构中进行调度。

而testing.M即是MainTest对应的数据结构。

数据结构

源码src\testing/testing.go:M定义了testing.M的数据结构:

// M is a type passed to a TestMain function to run the actual tests.type M struct {	tests      []InternalTest       // 单元测试	benchmarks []InternalBenchmark  // 性能测试	examples   []InternalExample    // 示例测试	timer     *time.Timer           // 测试超时时间}

单元测试、性能测试和示例测试在经过编译后都会被存放到一个testing.M数据结构中,在测试执行时该数据结构将传递给TestMain(),真正执行测试的是testing.M的Run()方法,这个后面我们会继续分析。

timer用于指定测试的超时时间,可以通过参数timeout <n>指定,当测试执行超时后将会立即结束并判定为失败。

执行测试

TestMain()函数通常会有一个m.Run()方法,该方法会执行单元测试、性能测试和示例测试,如果用户实现了TestMain()但没有调用m.Run()的话,那么什么测试都不会被执行。

m.Run()不仅会执行测试,还会做一些初始化工作,比如解析参数、起动定时器、跟据参数指示创建一系列的文件等。

m.Run()使用三个独立的方法来执行三种测试:

  • 单元测试:runTests(m.deps.MatchString, m.tests)
  • 性能测试:runExamples(m.deps.MatchString, m.examples)
  • 示例测试:runBenchmarks(m.deps.ImportPath(), m.deps.MatchString, m.benchmarks) 其中m.deps里存放了测试匹配相关的内容,暂时先不用关注。

赠人玫瑰手留余香,如果觉得不错请给个赞~

本篇文章已归档到GitHub项目,求星~

转载于:https://my.oschina.net/renhc/blog/3014718

你可能感兴趣的文章
IOC和DI
查看>>
Entity Framework 4 & 4.1
查看>>
统计在线人数
查看>>
HDU 2282 Chocolate
查看>>
jquery ui datepicker 只能选今天以后的日期
查看>>
控件:Gallery --- 3.(实现图片切换)
查看>>
Struts标签---logic:Iterate使用方法
查看>>
HDOJ-1102 Constructing Roads
查看>>
两分钟彻底让你明白Android Activity生命周期(图文)!
查看>>
关于KMP算法
查看>>
当C++遇到iOS应用开发---SQLITE篇
查看>>
Lucene
查看>>
html input readonly 和 disable的区别
查看>>
html代码格式严谨
查看>>
moodle 迁移
查看>>
树线段hdu 1754 I Hate It(线段树)
查看>>
uva-297 Quadtrees
查看>>
java6枚举类型
查看>>
构造函数产生的点及原因
查看>>
对象、对象数组、JSON、JSON数组的相关操作
查看>>