我对Go语言还是个新手,我有一些数据库函数需要测试,所以首先我有一个database.go文件,它连接到一个postgres数据库:
import (
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"os"
)
var DB *gorm.DB
var err error
func Open() error {
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable", os.Getenv("HOST"), os.Getenv("USER"),
os.Getenv("PASSWORD"), os.Getenv("DB"), os.Getenv("PORT"))
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
return err
}
return nil
}
然后我有一个customers.go文件,其中包含与该数据库交互的函数:
import (
"customers/cmd/database"
"time"
)
type Customers struct {
ID int
CustomerName string
Active bool
Balance float32
ActiveSince time.Time
}
func Get(id int) (Customers, error) {
var customer Customers
result := database.DB.First(&customer, id)
if result.Error != nil {
return Customers{}, result.Error
} else {
return customer, nil
}
}
这都是在docker中运行的,有customers容器和postgres容器。现在的问题是我如何测试我的Get(id int)
函数?我在研究dockertest,但它会产生一个不同的数据库,我的Get函数使用我在database.go中指定的数据库。那么有没有一个标准的Go语言方法来测试这些函数?
2条答案
按热度按时间iugsix8n1#
这是一个 Docker 网络的问题,但golang:
1.你可以创建一个Docker网络,在一个net.doc中运行两个容器或使用网络
--network=host
1.将postgres容器的端口导出到localhost,并将客户容器链接导出到localhost,
-pxx:xx
sdnqo3pr2#
在go.pl中有标准的单元测试方法,参考testing和testify/assert。单元测试通常写在代码旁边的xxx_test.go文件中。
对于DB访问层代码的单元测试,一个选项是拥有Testenv助手并在这些行上使用它。
客户_测试.go:
有一个单独的
docker-compose.yml
文件,并将其与docker compose
命令一起使用,以启动/停止postgresdb
等服务。go test
命令可用于运行测试。有关详细信息,请参阅命令文档。