Golang基础的测试该怎么做? | 青训营笔记

221 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记

😆在这里,我对今天的课所新学到的Golang的测试做了一次总结

😜Golang的其他知识在哪里找呢,那你就问对了

👨‍💻Golang基础复习 - 掘金 (juejin.cn) 在这里我总结了一些这篇文章没有提到的一些知识

😊如果有小伙伴能想到更多知识,欢迎大家在评论区留言,那么我们就开始吧

👩‍💻👨‍💻哟西,一个棕~

😎😎😎我是小小分割线

背景

测试是企业开发中用来避免失误或者解决未发现的bug,以提高产品的质量,以及避免损失,相当于在产品上线到用户使用前的最后一道屏障

我们下面介绍这些测试:

单元测试

Mock测试

基准测试

单元测试

单元测试的逻辑就是我们创建一个测试的单元,对其进行输入得到对应的输出,将输出与我们的期望值进行校对

单元测试的规则

首先对测试单元的文件名的要求,必须以**_test.go的形式

对于测试的函数的要求,必须是func TestXxx(*testing.T)的形式

例如

// Test后接首字母大写才可以
func TestMethod(t *testing.T) {

}

我们的初始化逻辑,Golang提供了TestMain方法

例如

func TestMain(m *testing.T) {
    // 测试前:数据装载、配置初始化等前置工作
    
    // 跑当前单元下的所有测试函数
    m.Run()
    
    // 测试后:释放资源等收尾工作
}

运行

使用go test [flags] [packages]

如果test的中内容被修改了等特定场景下也就做不到测试了,此时我们接下来看Mock

单元测试——Mock

这里介绍了一个常用的开源的Mock测试的包monkey

monkey:github.com/bouk/monkey

它可以实现对实例的方法进行打桩

也可以对一个函数进行打桩

打桩可以理解为我们用一个函数A去替换一个函数B,那么B就是原函数,A就是打桩函数

Mock提供两个方法

func Patch(target, replacement interface{}) *PatchGuard {
    ……
}

func Unpatch(target interface{}) bool {
    ……
}

Patch打桩函数

参数target表示原函数

参数replacement表示打桩函数

Unpatch函数将打桩卸载掉

实现原理:在运行时,将内存中函数的地址替换成运行时函数地址,在测试时我们实际调用的是打桩函数

此时我们通过Mock就可以对函数和方法进行打桩测试了,可以再任何时间任何环境测试,不再依赖本地文件

基准测试

golang提供了基准测试框架

用于测试一段程序运行时的性能和CPU的损耗,可以对代码做性能分析

使用方法与单元测试类似,格式为:func BenchmarkXxx(*testing.B)

例如

func BenchmarkMethod(b *testing.B) {
    ……
}

对于测试我们就总结到这里吧

😎😎😎又是我,我还是小小分割线

都用心看到这里了,那就求个赞吧😘

🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好