开发者社区> 轩脉刃> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java关于接口的使用
Java关于接口的使用
11 0
YFIOServer 后台IO接口使用说明
YFIOServer 后台IO接口使用说明
362 0
单元测试框架TestNg使用总结
工欲善其事,必先利其器 单元测试的重要性是不言而喻的。但如果没有好的单元测试工具,是无法激起开发人员的欲望。 Testng便是利器之一。TestNG是基于Annotation的测试框架的先驱,他拥有通过添加诸如灵活的装置、测试分类、参数测试和依赖方法等特性来克服JUnit3的一些不足之处。
851 0
如何判断自己使用的接口需要签约
说明:     很多同学可能不知道支付宝有些接口需要签约(我们称之为需签约接口),   有些不需要签约(我们称之为添加功能型接口)   应用如何创建:[url]https://openclub.alipay.
231 0
代码覆盖率计算利器:DotCover的使用(含Manual Test)
因为某项目的白盒单元测试做的不是很好,而QA又提出了非常高的代码覆盖率移行标准,不得以开始调研能覆盖手工测试(Mannual Test)的覆盖率工具,加上一些最基础的条件,该工具必须满足如下三点: 1:能计算白盒单元测试覆盖率; 2:能计算黑盒手工测试覆盖率; 3:支持MSTest框架; 第一个自然想到的就是NCover,没错,它肯定满足这三个条件,它有一个满足21天使用的Trial版本可以用,但是,商业版本的价格也是惊人的: NCover Code Central$ 2,298NCover Desktop$ 658NCover Collector$ 448 很多刀刀。
936 0
+关注
290
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载