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)
			})
		})
	})
}
相关推荐
大侠锅锅15 小时前
第 9 篇:状态机实践——状态环 + 步进表替代 if-else 地狱
golang·边缘计算·状态机
灯澜忆梦16 小时前
iota枚举
golang
进击的程序猿~17 小时前
Go Slice源码深度解析指南
开发语言·后端·golang
北冥you鱼1 天前
Go 语言初始化 MySQL 数据库实战指南:从零到生产环境部署
数据库·mysql·golang
名字还没想好☜2 天前
Go error 处理:errors.Is/As 与错误包装
开发语言·后端·golang·go·错误处理
灯澜忆梦2 天前
Go 工程管理与作用域
golang
进击的程序猿~2 天前
Go Zero源码阅读1
后端·golang
李燚2 天前
Go 项目怎么组织:DDD 4 层 vs MVC vs 脚本式
开发语言·golang·mvc·ddd·agent框架·eino
Generalzy2 天前
从 Web 页面到桌面应用:用 Go + WebView 构建一个轻量级桌面框架
开发语言·前端·golang
灯澜忆梦3 天前
GO_函数_2
开发语言·golang·xcode