i具有以下测试代码,在其中我正在测试某些端点和数据库(mongodb(功能。我正在使用MGO软件包,并且每次访问数据库时都有一些抽象来获取新的会话副本。
package resolvers_test
import (
//various imports here
)
func setup() {
log.Println("ENTER SETUPn")
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 SHUTDOWNn")
session := db.GetSession().Copy()
defer session.Close()
session.DB("testDB").DropDatabase()
log.Println("EXIT SHUTDOWNn")
}
func TestMain(m *testing.M) {
setup()
code := m.Run()
shutdown()
os.Exit(code)
}
在shutdown()
函数中,我放置了一个据说应该删除测试数据库的代码,但是虽然setup()
函数被调用(我知道,因为它创建了索引(shutdown()
函数从未调用。有什么想法吗?
编辑:输入End End Exting Exting 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
您在 setup()
defer session.Close()
因此,shutdown()
中的session := db.GetSession().Copy()
将获得一个新的会话,而无需选择任何DB。
使setup()
在TestMain()
*mgo.Session
和状态defer session.Close()