建立第一个单元测试(golang)-1(Day20)

当我们建立起最简单的RESTful api後,接下来我们就要将测试也放到我们的程序中了
在golang中,他原本就有将测试的框架包进去他原生的函示库了,在网路上也很很多不一样的测试框架,而我接下来会实做的测试方式,主要是参考

gorm mock

这篇文章的实作方式,如果大家有什麽其他的说明,也可以在下面留言交流

首先,要先安装测试需要的套件
测试框架
https://onsi.github.io/ginkgo/#getting-ginkgo

go get github.com/onsi/ginkgo/ginkgo
go get github.com/onsi/gomega/...

mock框架
https://github.com/golang/mock

go install github.com/golang/mock/[email protected]

gorm mock
https://github.com/DATA-DOG/go-sqlmock

go get github.com/DATA-DOG/go-sqlmock

在这边补充说明一下mock的用途
在最简单的测试中,你的程序中只会有input跟output
例如

func add(a int, b int) (output int) {
    return a + b
}

这样在撰写测试的时候就只要写上

result := add(1,2)
Expect(result).To(Equal(3))

这样即可,但如果有一天你的程序有依赖其他人
例如

import (
	"math/rand"
)

func isRandomEven() (output bool) {
	result := rand.Intn(86)
	return result%2 == 0
}

这时的测试就不能像上方这样写了,因为每次测试出来的结果都会不一样
这时候就要将rand.Intn所产出的内容用一个我们可以控制的function来控制,而这个动作就叫做mock
原始程序

import (
	"math/rand"
)
var getRandom = rand.Intn
func isRandomEven() (output bool) {
	result := getRandom(86)
	return result%2 == 0
}

测试

getRandom = func (_ int) int {
    return 10
}
result := isRandomEven()
Expect(result).To(Equal(true))

下一篇我们就要将这些测试的内容放到我们的程序中了


<<:  Believing These Myths About Assignment Helper Will Not Let You Grow

>>:  闲聊STM32CubeMX和STM32CubeIDE

Day02 - 为什麽你需要 Next.js ?

为什麽你需要 Next.js ? 对於工程师来说选择用什麽样的技术,背後都是取决於商业策略需要什麽...

[DAY 18]让BOT 24小时在线(GCP版本)

前几天有写一篇用replit让bot24小时在线的文章 但测试几天後发现bot执行的速度明显变慢个2...

[Day30]用Canvas打造自己的游乐场-挑战心得

30天的挑战就这样结束了,现在的心情怎麽有些空虚呢?? 哈哈哈,为什麽会这样呢??我想跟题目有关吧,...

[Day 3] 资料产品第一层 - 原始资料的类型

原始资料可能来自非常多不同的地方,我们可以根据资料产生的方式来加以分类 感应器资料 这边泛指各种 S...

Day4: [资料结构] Array —  阵列

Array是资料结构的一种,概念就像置物柜一样,每个柜子都可以存放资料并且都有自己的编号称为索引值...