Go如何优雅的写数据库的单测

这篇具有很好参考价值的文章主要介绍了Go如何优雅的写数据库的单测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Go如何优雅的写数据库的单测

Go如何优雅的写数据库的单测

遇到的问题

​ 当你想在代码中测试 Gorm 时,可以考虑使用单元测试或集成测试来确保 Gorm 的功能正常。下面是一个简单的示例,展示了如何编写一个基本的 Gorm 单元测试。

代码目录结构

  • app
    • config
      • config.yaml
      • conf.go
    • services
      • project.go
      • project_test.go
      • init_test.go
    • cmd
      • main.go

主要代码

// init_test.go
package managers

import (
    "testing"
    
	"git.xxxxxx.com/xxx/xxx/config"
	"git.xxxxxx.com/xxx/xxx//models"
	_ "xxxx.com/xxx/mysql" // import your used driver
)

func TestMain(m *testing.M) {
	config.GetConfig()
	models.Init()

	m.Run()
}

// conf.go
func getConfigFileName() string {
	rootDir, err := os.Getwd()
	if err != nil {
		panic(err)
	}
	if strings.HasSuffix(rootDir, "services") {
		rootDir = filepath.Dir(rootDir)
	}
	
	return rootDir + "/conf/config.yaml"
}

func GetConfig() *Config {
	configFile := getConfigFileName()
	bytes, err := ioutil.ReadFile(configFile)
	if err != nil {
		panic(fmt.Errorf("read config %s failed:%v", configFile, err))
	}

	config := Config{}
	if err := yaml.Unmarshal(bytes, &config); err != nil {
		panic(fmt.Errorf("parse config %s failed:%v", configFile, err))
	}
	return &config
}

// project_test.go
package managers

import (
	"context"
	"fmt"
	"testing"
)

func TestProjectByID(t *testing.T) {
	manager := NewProjectManager(context.TODO())
	item, err := manager.ProjectByID(234)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("item:", item)
}

主要函数分析

func getConfigFileName() string {
	rootDir, err := os.Getwd()
	if err != nil {
		panic(err)
	}
	if strings.HasSuffix(rootDir, "services") {
		rootDir = filepath.Dir(rootDir)
	}
	
	return rootDir + "/conf/config.yaml"
}
  1. rootDir, err := os.Getwd(): os.Getwd()函数用于获取当前工作目录的路径,并将路径保存在rootDir变量中。如果获取路径时出现错误,错误信息会存储在err变量中。
  2. if strings.HasSuffix(rootDir, "services") { rootDir = filepath.Dir(rootDir) }: 这段代码检查rootDir路径是否以"services"结尾。如果是,它会使用filepath.Dir()函数将路径调整为父目录,即去掉末尾的"services"部分。这段逻辑的目的是确保配置文件所在的目录是正确的。
  3. return rootDir + "/conf/config.yaml": 最后,函数返回拼接好的配置文件路径。它会将rootDir和"/conf/config.yaml"拼接在一起,以构成完整的配置文件路径。这里假设配置文件位于名为"conf"的文件夹下,文件名为"config.yaml"。

总的来说,这段代码的作用是获取当前工作目录路径,检查路径是否以"services"结尾,然后构建配置文件的完整路径并返回。文章来源地址https://www.toymoban.com/news/detail-776831.html

到了这里,关于Go如何优雅的写数据库的单测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 优雅编码!Java与MongoDB的创新数据库架构

    随着现代应用程序对数据存储和处理需求的不断增加,开发人员需要寻找更具创新性和灵活性的数据库架构来满足这些需求。在这样的背景下,Java与MongoDB的结合为开发人员提供了一种创新的数据库架构,为应用程序带来了无限可能。 下面将探讨Java与MongoDB的创新数据库架构

    2024年02月10日
    浏览(43)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(86)
  • Go语言操作MySql数据库

           go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库,可以很方便地实现对MySQL数据库的连接和操作。本文记录一下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 表中插入数据 3.4 表中删除

    2024年02月07日
    浏览(36)
  • GO学习之 数据库(Redis)

    1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Http) 11、GO学习之 微框架(Gin) 12、GO学习

    2024年02月12日
    浏览(38)
  • Go重写Redis中间件 - Go实现内存数据库

    前面我们实现了一个简单的回发Redis,这里我们要实现一个真正的Redis内核 实现底层Dict数据结构 新建一个datastruct文件夹,放一些我们要用的数据结构,比如Redis的核心起始就是一个map,再新建一个包实现这个map或者叫字典,字典的底层使用的就是map dict.go 写一个Dict接口定义

    2024年02月11日
    浏览(48)
  • GO框架基础 (一)、MySQL数据库

    什么是数据库 数据库是一个组织化的数据集合,它被设计为方便存储、管理和检索数据。数据库通常以表格的形式组织数据,其中每一行代表一个数据记录,每一列代表一个数据字段。数据库系统提供了一种结构化的方法来存储和管理数据,以便用户可以有效地访问和操作数

    2024年02月20日
    浏览(35)
  • Go 语言实现 MySQL 数据库事务

    MySQL事务是指一组数据库操作,它们被视为一个逻辑单元,并且要么全部成功执行,要么全部回滚(撤销)。事务是数据库管理系统提供的一种机制,用于确保数据的一致性和完整性。 事务具有以下特性(通常由ACID原则定义): 原子性(Atomicity):事务中的所有操作要么全

    2024年02月08日
    浏览(46)
  • SQLite 数据库入门教程(GO)

    1、什么是 SQLite?   SQLite是一个轻量级、嵌入式、跨平台的关系型数据库,是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,S

    2024年02月03日
    浏览(43)
  • Go 语言连接数据库实现增删改查

    MySQL驱动https://github.com/go-sql-driver/mysql 创建数据库后建表并插入数据 SQL 查询 插入结果 运行 SQL 查询更新结果 运行 SQL 查询删除结果

    2024年02月08日
    浏览(42)
  • 【go-zero】(1):尝试使用go-zero的工具goctl进行model,controller代码生成,配置数据库,实现FindAll方法,查询数据库全部数据

    本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/128707849 未经博主允许不得转载。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址是:https://juejin.cn/user/585379920479288 博主知乎地址是:https://www.zhihu.com/people/freewebsystem 项目地址: https://go-zero.dev/cn/ go-zero 是一个集

    2023年04月24日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包