Go语言学习11-测试

Go语言学习11-测试

单元测试

go 复制代码
// functions.go
package testing

func square(op int) int {
	return op * op
}
go 复制代码
// functions_test.go
package testing

import (
	"fmt"
	"github.com/stretchr/testify/assert"
	"testing"
)

func TestSquare(t *testing.T) {
	inputs := [...]int{1, 2, 3}
	expected := [...]int{1, 4, 9}
	for i := 0; i < len(inputs); i++ {
		ret := square(inputs[i])
		assert.Equal(t, expected[i], ret)
		//if ret != expected[i] {
		//	t.Errorf("input is %d, the expcted is %d, the actual %d",
		//		inputs[i], expected[i], ret)
		//}
	}
}

func TestErrorInCode(t *testing.T) {
	fmt.Println("Start")
	t.Error("Error")
	fmt.Println("End")
}

func TestFailInCode(t *testing.T) {
	fmt.Println("Start")
	t.Fatal("Error")
	fmt.Println("End")
}
内置单元测试框架
  • Fail, Error: 该测试失败, 该测试继续, 其他测试继续执行

  • FailNow, Fatal: 该测试失败, 该测试中止, 其他测试继续执行

  • 代码覆盖率

    bash 复制代码
    go test -v -cover
  • 断言https://github.com/stretchr/testify

Benchmark

go 复制代码
func BenchmarkConcatStringByAdd(b *testing.B) {
	// 与性能测试无关的代码
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		// 测试代码
	}
	b.StopTimer()
    // 与性能测试无关的代码
}
benchmark命令
bash 复制代码
go test -bench=. -benchmem

-bench=<相关benchmark测试>

Windows下使用go test命令行时, -bench=. 应写为 -bench="."

Behavior Driven Development

"I believe that the hardest part of software projects, the most common source of project failure, is communication with the customers and users of that software. By providing a clear yet precise language to deal with domains, a DSL can help improve this communication." -- Martin Fowler.

BDD in Go
项目网站

https://github.com/smartystreets/goconvey

安装
bash 复制代码
go get -u github.com/smartystreets/goconvey/convey
启动 web ui
bash 复制代码
$GOPATH/bin/goconvey
示例
go 复制代码
func TestSpec(t *testing.T) {
	// Only pass t into top-level Convey calls
	Convey("Given 2 even numbers", t, func() {
		a := 2
		b := 4

		Convey("When add the two numbers", func() {
			c := a + b

			Convey("Then the result is still even", func() {
				So(c%2, ShouldEqual, 0)
			})
		})
	})
}
相关推荐
ifanatic3 小时前
[每周一更]-(第144期):Go 定时任务的使用:从基础到进阶
开发语言·后端·golang
onlooker66666 小时前
Go语言底层(五): 深入浅出Go语言的ants协程池
开发语言·后端·golang
两斤半21 小时前
Linux配置go环境
linux·golang
比特森林探险记1 天前
GO 入门小项目-博客-结合Gin Gorm
开发语言·golang·gin
比特森林探险记1 天前
Go 语言 JWT 深度集成指南
golang
hacker_LeeFei1 天前
linux环境配置Go运行环境
linux·运维·golang
q567315231 天前
Go语言高并发爬虫程序源码
开发语言·爬虫·golang
march of Time1 天前
图数据库介绍及应用,go和Java使用图数据库
java·数据库·golang
西京刀客1 天前
Go语言json.Marshal多态机制
算法·golang·json
白总Server1 天前
Golang实现分布式Masscan任务调度系统
java·运维·服务器·开发语言·分布式·后端·golang