当前位置: 首页 > news >正文

石家庄网站建设费用广州网络营销推广公司

石家庄网站建设费用,广州网络营销推广公司,交换友情链接的目的,网站建设方案 评价Go单元测试基础1.go test工具2.单元测试函数3.go test -v/go test -run4.跳过某些测试用例5.子测试6.表格驱动测试7.并行测试8.使用工具生成测试代码9.测试覆盖率1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的#xff0c;并不需… Go单元测试基础1.go test工具2.单元测试函数3.go test -v/go test -run4.跳过某些测试用例5.子测试6.表格驱动测试7.并行测试8.使用工具生成测试代码9.测试覆盖率1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内所有以_test.go为后缀名的源代码文件都是go test测试的一部分不会被go build编译到最终的可执行文件中。 在*_test.go文件中有三种类型的函数单元测试函数、基准测试函数和示例函数。 go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数然后生成一个临时的main包用于调用相应的测试函数然后构建并运行、报告测试结果最后清理测试中生成的临时文件。 2.单元测试函数 每个测试函数必须导入testing包测试函数的基本格式签名如下 func TestName(t *testing.T){// ... }测试函数的名字必须以Test开头可选的后缀名必须以大写字母开头举几个例子 func TestAdd(t *testing.T){ ... } func TestSum(t *testing.T){ ... } func TestLog(t *testing.T){ ... }其中参数t用于报告测试失败和附加的日志信息。 testing.T的拥有的方法如下 func (c *T) Cleanup(func()) func (c *T) Error(args ...interface{}) func (c *T) Errorf(format string, args ...interface{}) func (c *T) Fail() func (c *T) FailNow() func (c *T) Failed() bool func (c *T) Fatal(args ...interface{}) func (c *T) Fatalf(format string, args ...interface{}) func (c *T) Helper() func (c *T) Log(args ...interface{}) func (c *T) Logf(format string, args ...interface{}) func (c *T) Name() string func (c *T) Skip(args ...interface{}) func (c *T) SkipNow() func (c *T) Skipf(format string, args ...interface{}) func (c *T) Skipped() bool func (c *T) TempDir() string实例 package mainfunc sum(x, y int) int {return x y }在当前目录下我们创建一个danyuan_test.go的测试文件并定义一个测试函数如下 package mainimport (reflecttesting )func TestDanyuan(t *testing.T) {sum : Sum(10, 20) // 程序输出的结果want : 30 // 期望的结果if !reflect.DeepEqual(want, sum) { // 因为slice不能比较直接借助反射包中的方法比较t.Errorf(expected:%v,got:%v, want, sum) // 测试失败输出错误提示} }在当前路径下执行go test命令可以看到输出结果如下 3.go test -v/go test -run 一个测试用例有点单薄我们再编写一个测试 func TestDanyuanTwo(t *testing.T) {sum : Sum(-20, -30)want : -50if !reflect.DeepEqual(want, sum) { // 因为slice不能比较直接借助反射包中的方法比较t.Errorf(expected:%v,got:%v, want, sum) // 测试失败输出错误提示} }现在我们有多个测试用例了为了能更好的在输出结果中看到每个测试用例的执行 情况我们可以为go test命令添加-v参数让它输出完整的测试结果 都通过了 假设有不通过的会提示我们 在执行go test命令的时候可以添加-run参数它对应一个正则表达式只有函数名匹配上的测试函数才会被go test命令执行 例如通过给go test添加-runTwo参数来告诉它本次测试只运行第二个这个测试用例 4.跳过某些测试用例 为了节省时间支持在单元测试时跳过某些耗时的测试用例 func TestTimeConsuming(t *testing.T) {if testing.Short() {t.Skip(short模式下会跳过该测试用例)}... }当执行go test -short时就不会执行上面的TestTimeConsuming测试用例 5.子测试 通常单元测试中需要多组测试数据保证测试的效果 Go1.7中新增了子测试支持在测试函数中使用t.Run执行一组测试用例这样就不需要为不同的测试数据定义多个测试函数了例如 func TestDanyuan(t *testing.T) {t.Run(case1, func(t *testing.T) {sum : Sum(-20, -30)want : -50if !reflect.DeepEqual(want, sum) { // 因为slice不能比较直接借助反射包中的方法比较t.Errorf(expected:%v,got:%v, want, sum) // 测试失败输出错误提示}})t.Run(case2, func(t *testing.T) {sum : Sum(20, 30)want : 50if !reflect.DeepEqual(want, sum) { // 因为slice不能比较直接借助反射包中的方法比较t.Errorf(expected:%v,got:%v, want, sum) // 测试失败输出错误提示}})t.Run(case3, func(t *testing.T) {sum : Sum(-20, 30)want : 10if !reflect.DeepEqual(want, sum) { // 因为slice不能比较直接借助反射包中的方法比较t.Errorf(expected:%v,got:%v, want, sum) // 测试失败输出错误提示}}) }6.表格驱动测试 表格驱动测试不是工具、包或其他任何东西它只是编写更清晰测试的一种方式和视角。 编写好的测试并非易事但在许多情况下表格驱动测试可以涵盖很多方面表格里的每一个条目都是一个完整的测试用例包含输入和预期结果有时还包含测试名称等附加信息以使测试输出易于阅读。 使用表格驱动测试能够很方便的维护多个测试用例避免在编写单元测试时频繁的复制粘贴。 表格驱动测试的步骤通常是定义一个测试用例表格然后遍历表格并使用t.Run对每个条目执行必要的测试。 例如我们针对上面的程序进行表格驱动测试 package mainimport (reflectstrconvtesting )/* 表格驱动测试 */ func TestDanyuan(t *testing.T) {var danyuantests []struct {in intout intwant int}{{10, 20, 30},{-30, 40, 10},{-55, -55, -110},{13131313, 14141414, 27272727},}// 遍历测试用例for _, tt : range danyuantests {t.Run(strconv.Itoa(tt.in), func(t *testing.T) { // 使用t.Run()执行子测试sum : Sum(tt.in, tt.out)if !reflect.DeepEqual(sum, tt.want) {t.Errorf(expected:%#v, got:%#v, tt.want, sum)}})} }在终端执行go test -v会得到如下测试输出结果 go test -vRUN TestDanyuanRUN TestDanyuan/10RUN TestDanyuan/-30RUN TestDanyuan/-55RUN TestDanyuan/13131313 --- PASS: TestDanyuan (0.00s)--- PASS: TestDanyuan/10 (0.00s)--- PASS: TestDanyuan/-30 (0.00s)--- PASS: TestDanyuan/-55 (0.00s)--- PASS: TestDanyuan/13131313 (0.00s) PASS ok Go-Page 0.042s7.并行测试 想要在单元测试过程中使用并行测试可以像下面的代码示例中那样通过添加t.Parallel()来实现 package mainimport (reflectstrconvtesting )/* 表格驱动测试 */ func TestDanyuan(t *testing.T) {var danyuantests []struct {in intout intwant int}{{10, 20, 30},{-30, 40, 10},{-55, -55, -110},{13131313, 14141414, 27272727},}// 遍历测试用例for _, tt : range danyuantests {t.Run(strconv.Itoa(tt.in), func(t *testing.T) { // 使用t.Run()执行子测试t.Parallel() // 将每个测试用例标记为能够彼此并行运行sum : Sum(tt.in, tt.out)if !reflect.DeepEqual(sum, tt.want) {t.Errorf(expected:%#v, got:%#v, tt.want, sum)}})} }8.使用工具生成测试代码 社区里有很多自动生成表格驱动测试函数的工具比如gotests等很多编辑器如Goland也支持快速生成测试文件。这里简单演示一下gotests的使用 安装 go get -u github.com/cweill/gotests/...执行待测试的文件为mul.go gotests -all -w mul.go9.测试覆盖率 测试覆盖率是指代码被测试套件覆盖的百分比。通常我们使用的都是语句的覆盖率也就是在测试中至少被运行一次的代码占总代码的比例。在公司内部一般会要求测试覆盖率达到80%左右 Go提供内置功能来检查你的代码覆盖率即使用go test -cover来查看测试覆盖率 此处可以看到覆盖率是50%原因是有一个函数我们没有对它添加单元测试 版权声明本文教程基于李文周的Go语言博客
http://www.tj-hxxt.cn/news/223924.html

相关文章:

  • asp.net网站开发模板蒲公英路由器登录地址
  • 培训网站系统建设手机建站模版
  • 企业网站推广在哪里办广州360公司总部
  • 四川建设主管部门网站网站建设思路设计
  • 什么网站可以接设计方案国外家具设计网站
  • 能不能同行网站做站长统计个人做网站 私活
  • 企业网站php开源系统杭州专业网站建设公司哪家好
  • 中国建设银行悦生活网站食品公司网站设计项目
  • 网站分类导航代码做旅游网站的目的和意义
  • 小米网站开发语言免费设计app的网站建设
  • 二七免费网站建设百度快照收录
  • vps可以用了做网站吗网站设计公司收费标准
  • 有网站怎么开发app视频网站开发php
  • 网页制作正版网站湖南优化公司
  • 株洲网站建设 株洲网站制作唐山企业网站模板建站
  • 沈阳企业网站优化排名方案网站加速
  • 网站建设 个人服务器seo关键词首页排名
  • 茶网站建设实训报告全国最大房产网络平台
  • 科普网站建设经验wordpress网址插件
  • 扬中网站建设公司班级网站设计
  • 谷歌seo网站运营怎么注册微网站吗
  • 电脑做网站用word网站站建设
  • 保山做网站建设网站备案 类型
  • php做的汽车销售网站网站建设模块下载
  • 网页制作免费网站德阳做网站
  • 做短裙的视频网站3705房产网
  • 自己写的网站如何添加 cnzz统计建设网站必须用dns
  • 为什么asp.net做的网站上传后不显示照片网站文件名优化
  • 牡丹江 网站建设网上服务旗舰店
  • soho没有注册公司 能建一个外贸网站吗网页设计素材网站大全