我有以下测试代码,我正在测试一些端点和数据库(mongoDB)功能。我正在使用mgo包,每次访问数据库时都会有一些抽象来获取新的会话副本。
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()
函数时(我知道因为它创建了索引){{1永远不会调用函数。有什么想法吗?
编辑:我在输入结束退出setup()和shutdown()以及控制台日志时添加了日志语句。这些功能都可以访问。日志如下:
shutdown()
答案 0 :(得分:1)
您在defer session.Close()
setup()
因此session := db.GetSession().Copy()
中的shutdown()
会在未选择任何数据库的情况下获得新会话。
让setup()
返回*mgo.Session
并在defer session.Close()
TestMain()