从未调用TestMain m.Run()之后的拆解功能

时间:2018-02-10 00:45:04

标签: mongodb go mgo

我有以下测试代码,我正在测试一些端点和数据库(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()

1 个答案:

答案 0 :(得分:1)

您在defer session.Close()

中陈述setup()

因此session := db.GetSession().Copy()中的shutdown()会在未选择任何数据库的情况下获得新会话。

setup()返回*mgo.Session并在defer session.Close()

中说明TestMain()