在集成测试中,我想检查代码如何与真实的数据库实例(Postgresql)一起使用。我不需要嘲笑它。它必须是一个真实的数据库。 如果我可以并行运行测试,那就太好了。 我的代码包含数据库事务。
要共享连接,我创建了一个db
包:
package db
import (
"flag"
"fmt"
"github.com/jmoiron/sqlx"
)
var cachedDBConn *sqlx.DB
func getconnection(host string,port uint16,user string,password string,databaseName string) (*sqlx.DB,error) {
if cachedDBConn != nil {
return cachedDBConn,nil
}
dbConnStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host,port,user,password,databaseName)
cachedDBConn,err := sqlx.Open("postgres",dbConnStr)
if err != nil {
return nil,err
}
return cachedDBConn,nil
}
// allow to redefine connection settings for tests in CI
var (
dbHost = flag.String("test.dbhost","localhost","Test Database host address")
dbPort = flag.Int("test.dbport",5432,"Test Database port number")
dbUser = flag.String("test.dbuser","ccm_test","Test Database user name")
dbPassword = flag.String("test.dbpass","Test Database user password")
dbName = flag.String("test.dbname","ezan_ccm_test","Test Database name")
)
// MustGetTestConnection panics if can't create connection
func MustGetTestConnection() (conn *sqlx.DB) {
db,err := getconnection(*dbHost,uint16(*dbPort),*dbUser,*dbPassword,*dbName)
if err != nil {
panic(fmt.Sprintf("Failed to create DB connection: %v",err))
}
return db
}
我已经看到了temp schema fo Postgres和a solution with revert fuction的解决方案
哪种方法更适合使用并行运行和事务处理?