Go语言测试(回归测试、集成测试、单元测试简述)与项目开发的流程简述

news2024/10/10 0:24:53

测试+项目流程

  • 1. 测试的类别
  • 2. 单元测试的规则(函数以Test开头)
    • 2.1 示例1
    • 2.2 示例2
  • 3. Mock测试(打桩)
  • 4. 基准测试(类似于单元测试,函数以Benchmark开头)
  • 5. 项目开发的流程
    • 项目拆解
    • 代码设计
    • 测试运行

1. 测试的类别

回归测试:使用APP,如刷抖音看评论
集成测试:对功能维度进行自动化测试
单元测试:对单独的函数、模块做验证
以上三个:测试成本下降,覆盖率上升

2. 单元测试的规则(函数以Test开头)

命名:所有的测试文件以_test.go结尾
函数名:func TestXxx(*testing.T)
初始化逻辑:

func TestMain(m *testing.M){
	//测试前:数据装载、 配置初始化等
	code:=m.Run()
	//测试后:释放资源等
	os.Exit(code7777776)
}

2.1 示例1

package main

import "testing"

func HelloTom() string {
	return "Jerry"
}
func TestHelloTom(t *testing.T) {
	output := HelloTom()
	expectOutput := "Tom"
	if output != expectOutput {
		t.Errorf("Expected %s do not match actual %s", expectOutput, output)
	}
}
func main() {
	testing.Main(func(pat, str string) (bool, error) { return true, nil }, []testing.InternalTest{{"TestHelloTom", TestHelloTom}}, []testing.InternalBenchmark{}, []testing.InternalExample{})
}

在这里插入图片描述

2.2 示例2

package main

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func HelloTom() string {
	return "Tom"
}
func TestHelloTom(t *testing.T) {
	output := HelloTom()
	expectOutput := "Tom"
	assert.Equal(t, expectOutput, output)
}
func main() {
	testing.Main(func(pat, str string) (bool, error) { return true, nil }, []testing.InternalTest{{"TestHelloTom", TestHelloTom}}, []testing.InternalBenchmark{}, []testing.InternalExample{})
}

在这里插入图片描述

单元测试覆盖率:50%~60%,较高80%

3. Mock测试(打桩)

处理文件(如改变数据库)后,可能原本依赖的输入不正确了,程序也就不能运行了。为了避免这个问题,进行Mock打桩。Go语言中有很多第三方库提供了 mock 功能,例如Monkey这个库,可以简单地利用Patch将函数的运行地址替换成原来的,最后Unpatch替换回来。保证单元测试的稳定性。例如:

package main

import (
	"fmt"
	"github.com/bouk/monkey"
)

func main() {
	// 要替换的函数
	originalFunction := func() string {
		return "Hello, World!"
	}

	// 替换函数
	patch := monkey.Patch(originalFunction, func() string {
		return "Goodbye, World!"
	})
	defer patch.Unpatch()

	fmt.Println(originalFunction())
	// 输出: Goodbye, World!
}

在这个例子中,我们使用了 monkey 库中的 Patch 函数来替换 originalFunction 函数,并在最后使用 Unpatch 函数来撤销替换。在这个例子中,替换后的函数将总是返回 “Goodbye, World!”。

4. 基准测试(类似于单元测试,函数以Benchmark开头)

性能分析(如服务器负载均衡中使用到了rand函数,测试时使用串行测试和并行测试效率不同。若用fastrand函数代替rand函数,发现性能有巨大提升。)本地跑一跑。

5. 项目开发的流程

项目拆解

首先明确需求;
然后作ER图(明确各主体的各个属性);
然后进行分层结构的设计,如数据层、逻辑层、视图层

代码设计

根据各个层进行代码的实现。

测试运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪涌保护器(电涌保护器)连接线规格分析方案

低压配电设计中,现在对于浪涌保护器(SPD)及其专用保护装置的标注和画法,都比较规范统一了。那有没有遇到要求标注浪涌保护器连接线规格的情况?或者说,设计师有没有责任要标注清楚各类浪涌保护器连接线规格?地凯科技防雷…

屈光发育档案是什么?为什么专业医生建议从3岁开始就要建立?

当孩子出现近视问题时,家长们都会很焦虑。其实儿童视力发育是一个循序渐进,逐渐成长完善的过程。我们唯一能做的就是预防,在未近视时提前发现近视的趋势。来源:卫生健康委网站这其中最为关键的是建立屈光发育档案。国家青少年近视…

视频剪辑有这6个高清视频素材库就够了

视频剪辑必备的6个网站,免费、可商用,建议收藏! 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材类型非常多,平面设计、UI设计、电商类、图片、视频、音频等素材站内都能找到。视频素材全部高清、无…

C++——map和set封装实现

目录 mao和set模拟实现 模拟实现 取K的仿函数 Insert 迭代器 begin和end 和-- operator[] 完整代码 set.h map.h rbtree.h mao和set模拟实现 STL map和set只是包含了几个头文件 主要在选中的这个文件里,打开之后我们可以看到红黑树 用红黑树…

【操作系统】第二章 进程与线程

文章目录第二章 知识体系2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组成2.1.4 进程控制2.1.5 进程通信2.1.6 进程的上下文切换2.1.7 线程和多线程模型2.2 处理机调度2.2.1 调度的概念2.2.2 调度的层次分类2.2.3 调度的实现2.2.4 典型的调度算法2…

【八大数据排序法】选择排序法的图形理解和案例实现 | C++

第十五章 选择排序法 目录 第十五章 选择排序法 ●前言 ●认识排序 ●一、选择排序法是什么? 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ● 总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则…

活体识别3:论文笔记之《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》

说明 本文是我对论文《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》做的一个简单笔记。 这个论文是芬兰奥卢大学(Oulu)课题组的一篇很有代表性的论文,写于2015年,使用的是“LBP特征SVM分类器”这种比较传统的方案,方案不复杂&…

如何使用 JuiceFS 创建 WebDAV 共享

WebDAV 是一种基于 HTTP 的文件共享协议,最初被设计用于多用户文档协作编辑的场景,也被广泛应用在基于互联网的文件存储、数据同步等网盘类应用场景。 手机端和 PC 端有大量的应用内置了对 WebDAV 的支持,比如知名的文献管理工具 Zotero、iP…

微信小程序 java Springboot校园租房指南房屋租赁系统

东前端;首页、房源信息、租房指南、我的,用户前端;首页、房源信息、租房指南、我的等主要功能模块的操作和管理。 1.出租房源信息的上传、审核、发布; 2.租房信息的浏览、查找、查看; 3.用户与出租方通信; …

Docker-01基本命令

1、Docker安装 系统镜像为Centos7.x yum包更新到最新 sudo yum update安装需要的软件包,yum-util提供yum-config-manager功能。另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2设置yum源为阿里云 sudo yu…

OpenText 企业内容管理平台客户案例——印度鲁宾(Lupin)制药公司

OpenText 企业内容管理平台客户案例——印度鲁宾(Lupin)制药公司 公司:Lupin 行业:制药 方案: OpenText™ Extended ECM Platform OpenText™ AppWorks™ OpenText™ Capture 合作伙伴:Muraai Informat…

uniapp数据缓存与apk打包

目录 一、uniapp数据缓存Storage 1.1、存值uni.setStorageSync(KEY,DATA) 1.2、取值uni.getStorageSync(KEY) 1.3、uni.removeStorageSync(KEY) 1.4、uni.clearStorageSync() 二、配置发行H5--打包 一、uniapp数据缓存Storage 1.1、存值uni.setStorageSync(KEY,DATA) 含…

APISIX介绍和安装使用

APISIX目录什么是APISIX?与 Kong的比较概述安装1. 安装依赖2 安装 Apache APISIX2.1 安装脚本2.2 启动 APISIXAPISIX 控制台动态负载均衡1. 启动2个微服务命令2.验证服务是否正常3. 重要概念4.创建 APISIX Upstream(上游,后端 API 服务&#…

Python(12)--元组

一、元组的基本介绍 元组(tuple):这种数据类型结构与列表相同,但它与列表也有很大的差异,它的元素值与元素个数不可更改。 列表的定义是将元素放入[ ]中,元组的定义是将元素放入()中…

通过堆转储快照定位JVM堆内存OOM的问题

目录获取堆转储快照JVM启动时增加参数通过jmap指令生成分析堆转储快照Eclipse Memory Analyzer简介示例获取堆转储快照 如何获取堆转储快照?常用的有两种方式: JVM启动时增加参数 出现OOM时生成堆dump: -XX:HeapDumpOnOutOfMemoryError指…

【2325. 解密消息】

来源:力扣(LeetCode) 描述: 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。将…

【数据结构初阶】第六篇——二叉树的重要性质

树的概念及结构 树的概念 树中专有名词 树的表示 二叉树的概念及其重要性质 二叉树的概念 数据结构中的二叉树 特殊的二叉树 二叉树的性质 二叉树的存储结构 顺序结构 链式结构 树的概念及结构 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有…

【算法】Brute-Force 算法

目录1.概述2.代码实现本文参考: 《数据结构教程》第 5 版 李春葆 主编 1.概述 (1)设有两个串 s 和 t,串 t 的定位就是要在串 s 中找到一个与 t 相等的子串。通常把 s 称为目标串(target string),把 t 称为模式串(patt…

flutter 之 ListView的使用与详解 map for listview.builder 的使用

1.ListView 配合ListTile 实现新闻列表样式 ListView(children: <Widget>[ListTile(title: const Text(我是 title),subtitle: const Text(我是 sub_title),leading: Image.asset(images/c.png,fit: BoxFit.cover,),trailing: const Icon(Icons.chevron_right,size: 22,…

九龙证券|港股盘中暴涨110%!多股涨停,有色、汽车板块爆发!

阴历兔年春节后第三个交易日上午&#xff0c;A股首要指数重回涨势&#xff0c;全体走势略显震动胶着。北向资金持续呈现净买入趋势&#xff0c;半响净买入额到达30.61亿元。 港股方面&#xff0c;全体体现也较好&#xff0c;恒生科技指数领涨。港股个股方面亮点纷呈&#xff0c…