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)
			})
		})
	})
}
相关推荐
Java面试题总结10 小时前
Go 里什么时候可以“panic”?
开发语言·后端·golang
吴声子夜歌1 天前
Go——并发编程
开发语言·后端·golang
geovindu1 天前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式
码农阿豪1 天前
Go 语言操作金仓数据库(上篇):环境搭建与连接管理
开发语言·数据库·golang
码农阿豪1 天前
Go 语言操作金仓数据库(下篇):SQL 执行、类型映射与超时控制
数据库·sql·golang
~|Bernard|2 天前
五,go语言的内存管理
开发语言·后端·golang
君万2 天前
【LeetCode每日一题】3. 无重复字符的最长子串 560. 和为 K 的子数组
算法·leetcode·golang·go
~|Bernard|2 天前
四,go语言中GMP调度模型
java·前端·golang
littleschemer2 天前
Go 手动挡元编程:go:generate 实战解析
golang·游戏服务器·元编程·generate
平凡但不平庸的码农2 天前
Go GMP 调度模型详解
开发语言·后端·golang