unit-testing - 获取数据库连接的连接字符串
问题描述
我正在尝试测试此功能:
//OpenConnection opens a connection to a MySQL database by `connStr`
// or returns error. If `connStr` is empty, error is returned.
//
// Parameters:
// - `connStr`: the URL of the database to connect to
// - `interpolateParams` : should we interpolate parameters?
//
// Returns:
// - pointer to the database connection
// - any errors that happened during this process
func OpenConnection(connStr string, interpolateParams bool) (*sql.DB, *errors.ErrorSt) {
if connStr == "" {
return nil, errors.Database().ReplaceMessage("No database connection string.")
}
connStr = connStr + "?parseTime=true&multiStatements=true"
if interpolateParams {
connStr += "&interpolateParams=true"
}
db, err := sql.Open("mysql", connStr)
if err != nil {
return nil, errors.Database().AddDetails(err.Error(), connStr)
}
return db, nil
}
对于 的情况interpolateParams
。我正在筛选官方文档,发现没有简单的方法可以从sql.DB
. 由于这是单元测试,我当然会使用虚假的连接 URL 来访问该功能。
有没有办法从中获取连接 URLsql.DB
以检查插值查询字符串?
解决方案
database/sql
主要专注于成为使用 SQL 做事的接口。连接字符串通常是特定于驱动程序的,因此我会查看您正在使用的驱动程序以获取如何获取连接字符串的线索在您的情况下,根据顶部的注释判断,您使用的是 MySQL,所以我假设您会使用go-sql-driver/mysql
. 您可以直接在代码中导入它(而不是使用空白导入)并访问Config
结构,记录在这里:https ://github.com/go-sql-driver/mysql/blob/master/dsn.go#L35其中从你传入的 dsn 中填充sql.Open
推荐阅读
- java - 是否有任何选项可以在 java 中加密代码,它应该是解密并仅在运行时执行?
- laravel - 同步运行 Laravel 作业链
- algorithm - Codeforces 问题的正确性证明:Fox and Box Accumulation (388A)
- authentication - 跨微服务传递用户信息
- sql - Oracle:按条件排序并保留历史记录
- react-native - React Native Debug 模式抛出错误,为什么会这样?
- git - 如何在 Bitbucket 中查找旧的提交和评论?
- laravel - 如何在没有定义 Web.php 或 Laravel 控制器的情况下调用中间件?
- vue.js - 如何在小时:分钟内进行简单的输入?
- javascript - 来自另一个反应组件的触发功能