go单元测试和基准测试

devtools/2025/2/4 2:10:01/

1、单元测试和基准测试

单元测试和基准测试代码开发中的重要环节,良好的单元测试和基准测试,能提升开发质量,对整体开发有非常重要的重要,下面介绍单元测试和基准测试的写法。

2、单元测试和基准测试写法

以排序基本排序算法,选择和插入为例介绍,整体代码目录如图所示
创建sort.go和对象sort_test.go
在这里插入图片描述
在sort.go中增加函数InsertSort和SelectSort

package mainfunc SeletSort(a []int) {for i := 0; i < len(a)-1; i++ {for j := i + 1; j < len(a); j++ {if a[j] < a[i] {a[j], a[i] = a[i], a[j]}}}
}func InsertSort(a []int) {for j := 1; j < len(a); j++ {for i := j; i > 0 && a[i] < a[i-1]; i-- {a[i], a[i-1] = a[i-1], a[i]}}}

单元测试需要以Test为前缀+待测试函数,在sort_test.go增加TestSelectSort函数:

func TestSelectSort(t *testing.T) {testCases := []struct {input    []intexpected []int}{{input:    []int{8, 12, 3, 1, 4, 5},expected: []int{1, 3, 4, 5, 8, 12},},{input:    []int{8, 13, 0, 9, 8, 7, 6},expected: []int{0, 6, 7, 8, 8, 9, 13},},{input:    []int{10, 9, 8, 7, 6, 5, 4},expected: []int{4, 5, 6, 7, 8, 9, 10},},{input:    []int{1, 2, 3, 6, 5, 4},expected: []int{1, 2, 3, 4, 5, 6},},{input:    []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},},}for i := 0; i < len(testCases); i++ {SeletSort(testCases[i].input)if !compareSlice(testCases[i].input, testCases[i].expected) {t.Errorf("Test case %d: Expected slice %v but received error %v", i+1, testCases[i].expected, testCases[i].input)}}}

基准测试以Benchmark+待测函数,分别添加BenchmarkSelectSort和BenchmarkInsertSort

func BenchmarkInsertSort(b *testing.B) {for i := 0; i < b.N; i++ {testCases := []struct {input    []intexpected []int}{{input:    []int{8, 12, 3, 1, 4, 5},expected: []int{1, 3, 4, 5, 8, 12},},{input:    []int{8, 13, 0, 9, 8, 7, 6},expected: []int{0, 6, 7, 8, 8, 9, 13},},{input:    []int{10, 9, 8, 7, 6, 5, 4},expected: []int{4, 5, 6, 7, 8, 9, 10},},{input:    []int{1, 2, 3, 6, 5, 4},expected: []int{1, 2, 3, 4, 5, 6},},{input:    []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},},}for i := 0; i < len(testCases); i++ {InsertSort(testCases[i].input)}}
}func BenchmarkSelectSort(b *testing.B) {for i := 0; i < b.N; i++ {testCases := []struct {input    []intexpected []int}{{input:    []int{8, 12, 3, 1, 4, 5},expected: []int{1, 3, 4, 5, 8, 12},},{input:    []int{8, 13, 0, 9, 8, 7, 6},expected: []int{0, 6, 7, 8, 8, 9, 13},},{input:    []int{10, 9, 8, 7, 6, 5, 4},expected: []int{4, 5, 6, 7, 8, 9, 10},},{input:    []int{1, 2, 3, 6, 5, 4},expected: []int{1, 2, 3, 4, 5, 6},},{input:    []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},},}for i := 0; i < len(testCases); i++ {SeletSort(testCases[i].input)}}
}

3.测试

go test 或者go test -v测试单元测试
在这里插入图片描述
单元测试某个函数
在这里插入图片描述
基准测试
在这里插入图片描述
基准测试某个函数
在这里插入图片描述


http://www.ppmy.cn/devtools/155876.html

相关文章

数据结构 树2

文章目录 前言 一&#xff0c;二叉搜索树的高度 二&#xff0c;广度优先VS深度优先 三&#xff0c;广度优先的代码实现 四&#xff0c;深度优先代码实现 五&#xff0c;判断是否为二叉搜索树 六&#xff0c;删除一个节点 七&#xff0c;二叉收索树的中序后续节点 总结 …

C++模板编程——可变参函数模板之折叠表达式

目录 1. 什么是折叠表达式 2. 一元左折 3. 一元右折 4. 二元左折 5. 二元右折 6. 后记 上一节主要讲解了可变参函数模板和参数包展开&#xff0c;这一节主要讲一下折叠表达式。 1. 什么是折叠表达式 折叠表达式是C17中引入的概念&#xff0c;引入折叠表达式的目的是为了…

dotnet LINQ 使用简明教程

简介 语言集成查询&#xff08;LINQ&#xff09;是一组强大的技术&#xff0c;它将查询功能直接集成到 c# 语言中。LINQ 查询是 c#.net 中的一等语言结构&#xff0c;就像类、方法、事件一样。LINQ 为查询对象&#xff08; LINQ to objects &#xff09;、关系数据库&#xff…

PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复

问题 在 PVE 中给 Debian 虚拟机新分配硬盘后&#xff0c;通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后&#xff0c;怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识&#xff1a;挂载硬盘和开启Samba共享。 新建一个虚拟机&#xf…

【go语言】接口

一、什么是鸭子类型 鸭子类型&#xff08;Duck Typing&#xff09;是一种动态类型系统的概念&#xff0c;源自于一句名言&#xff1a;“如果它走起来像鸭子、叫起来像鸭子&#xff0c;那它就是鸭子。” 这意味着&#xff0c;在鸭子类型的编程语言中&#xff0c;类型不是通过显式…

Microsoft Visual Studio 2022 主题修改(补充)

Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了&#xff0c;今天闲来无事就补充几点细节。 具体的修改可以参考&#xff1a;Microsoft Visual Studio 2022 透明背景修改&#xff08;快捷方法&#xff09;_material studio怎么把背景弄成透明-CSDN博客文…

复制粘贴小工具——Ditto

在日常工作中&#xff0c;复制粘贴是常见的操作&#xff0c;但Windows系统自带的剪贴板功能较为有限&#xff0c;只能保存最近一次的复制记录&#xff0c;这对于需要频繁复制粘贴的用户来说不太方便。今天&#xff0c;我们介绍一款开源、免费且功能强大的剪贴板增强工具——Dit…

使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统

近期&#xff0c;我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子&#xff0c;需要在这类环境下开发程序。说实在的我也没有用过这个平台&#xff0c;但是基于常识&#xff0c;推测只要基于C和Qt&#xff0c;应该问题不大。 1. …