一文详解Go语言单元测试的原理与使用_第1页
一文详解Go语言单元测试的原理与使用_第2页
一文详解Go语言单元测试的原理与使用_第3页
一文详解Go语言单元测试的原理与使用_第4页
一文详解Go语言单元测试的原理与使用_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一文详解Go语言单元测试的原理与使用目录前言为什么要引用单元测试类单元测试基本介绍优点Testing规范基本使用Golang运行命令行案例

前言

为什么要引用单元测试类

传统方法的缺点分析

不方便,我们需要在main函数中去调用,这样就需要去修改main函数,如果现在项目正在运行,就可能去停止项目

不利于管理,因为当我们测试多个函数或者多个模块时,都需要写在main函数,不利于我们管理和清晰我们的思路

单元测试基本介绍

Go语言中自带有一个轻量级的测试框架testing和自带的gotest命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例

优点

确保每个函数是可运行,并且运行结果是正确的确保写出来的代码性能是好的单元测试能及时的发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计的一些问题,让程序能够在高并发的情况下还能保持稳定

Testing规范

1.测试用例文件名必须以_test.go结尾

2.测试用例函数必须以Test开头,一般来说就是Test+被测试的函数名

3.测试用例函数的形参类型必须是*testing.T

4.一个测试用例文件中,可以由多个测试用例函数

5.当出现错误使,可以使用t.Fatalf来格式化输出错误信息,并退出程序

6.t.Logf方法可以输出相应的日志

7.测试用例函数,并没有放在main函数中,但是却执行了main函数

8.pass表示测试用例运行成功,Fail表示测试用例运行失败

9.测试单个文件,一个要带上被测试的源文件

gotest-vcal_test.gocal.go

10.测试单个方法

gotest-v-test.run函数名

基本使用

cal.go

packagemain

funcadd(nint)(int){

varsumint

fori:=1;ii++{

sum+=i

returnsum

cal_test.go

packagemain

import"testing"

//函数名规范Test+要测试的函数名(t*testing)

funcTestAdd(t*testing.T){

res:=add(9)

if(res!=55){

t.Fatalf("add(10)执行错误,期望值=%v实际值=%v\n",55,res)

t.Logf("执行正确!!")

Golang运行

命令行

案例

monster.go

packagemonster

import(

"encoding/json"

"fmt"

"io/ioutil"

typeMonsterstruct{

Namestring

Ageint

Skillstring

func(this*Monster)Store()bool{

data,err:=json.Marshal(this)

iferr!=nil{

fmt.Println("err=",err)

returnfalse

filename:="f:/test.ser"

err2:=ioutil.WriteFile(filename,data,0666)

iferr2!=nil{

fmt.Println("err=",err2)

returnfalse

returntrue

func(this*Monster)ReStore()bool{

filename:="f:/test.ser"

reader,err2:=ioutil.ReadFile(filename)

iferr2!=nil{

fmt.Println("err=",err2)

returnfalse

err:=json.Unmarshal(reader,this)

iferr!=nil{

fmt.Println("err=",err)

returnfalse

returntrue

}

monster_test.go

packagemonster

import(

"fmt"

"testing"

funcTestStore(t*testing.T){

monster:=Monster{

Name:"张三",

Age:18,

Skill:"打游戏",

flag:=monster.Store()

if!flag{

t.Fatalf("monster.Store()错误,期望为%v,实际为%v",true,flag)

t.Logf("monster.Store()测试成功")

funcTestRestore(t*testing.T){

varmonster=Monster{}

flag:=monster.ReStore()

if!flag{

t.Fatal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论