gpt4 book ai didi

mongodb - 从未调用 TestMain m.Run() 后的拆解函数

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:07 26 4
gpt4 key购买 nike

我有以下测试代码,用于测试一些端点和数据库 (mongoDB) 功能。我正在使用 mgo 包,每次访问数据库时我都有一些抽象来获取新的 session 副本。

package resolvers_test

import (
//various imports here
)

func setup() {
log.Println("ENTER SETUP\n")
customerIndex := mgo.Index{
Key: []string{"email"},
Unique: true,
Background: true,
Sparse: true,
}

session := db.GetSession().Copy()
defer session.Close()
customerCollection := session.DB("testDB").C("customerCollection")

customerCollection.EnsureIndex(customerIndex)
log.Println("EXIT SETUP")

}

func shutdown() {
log.Println("ENTER SHUTDOWN\n")
session := db.GetSession().Copy()
defer session.Close()
session.DB("testDB").DropDatabase()
log.Println("EXIT SHUTDOWN\n")
}

func TestMain(m *testing.M) {
setup()
code := m.Run()
shutdown()
os.Exit(code)
}

shutdown() 函数中,我放置了一段应该删除测试数据库的代码,但是当 setup() 函数被调用时(我知道因为它创建了索引),所以永远不会调用 shutdown() 函数。有什么想法吗?

编辑:我在进入 end exiting setup() 和 shutdown() 以及控制台日志时添加了日志语句。这些功能都是可达的。日志如下:

2018/02/10 09:09:54 ENTER SETUP

2018/02/10 09:09:55 EXIT SETUP
=== RUN TestCreateCustomer
--- PASS: TestCreateCustomer (0.14s)
a_customerProfile_test.go:108: Create Customer successful
=== RUN TestCustomerProfile
--- PASS: TestCustomerProfile (0.27s)
a_customerProfile_test.go:152: Customer Profile Test Successful
PASS
2018/02/10 09:09:55 ENTER SHUTDOWN

2018/02/10 09:09:55 EXIT SHUTDOWN

最佳答案

你说的是 defer session.Close()setup()

因此 session := db.GetSession().Copy()shutdown()将获得一个没有选择任何数据库的新 session 。

制作setup()返回 *mgo.Session和状态defer session.Close()TestMain()

关于mongodb - 从未调用 TestMain m.Run() 后的拆解函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com