【问题标题】:how to use TestMain with global aetest.NewInstance如何将 TestMain 与全局 aetest.NewInstance 一起使用
【发布时间】:2016-01-29 06:22:56
【问题描述】:

我正在使用 “google.golang.org/appengine/aetest” 像这样打包并设置我的 TestMain:

var myAeInst aetest.Instance


func TestMain(m *testing.M) {
    var err error
    myAeInst, err = aetest.NewInstance(&aetest.Options{StronglyConsistentDatastore: true})
    defer tearDown()

    c := m.Run()

    os.Exit(code)
}

func tearDown() {
    if myAeInst != nil {
        myAeInst.Close()
    }
}

但是卡在aetest.NewInstance,有人遇到过类似的问题吗?

【问题讨论】:

  • 我发现只有当我的 go 项目设置有多个具有不同包名的子目录时才会出现此问题。如果同一文件夹中的所有内容和所有测试文件都使用相同的包名,则它可以工作。有没有人试图让 TestMain 适用于多个包装案例?我需要能够使用 go test ./... 运行测试
  • 我唯一一次看到类似的情况是当 goapp 在启动新的 dev_appserver.py 实例时遇到问题。

标签: google-app-engine go


【解决方案1】:

您调用defer tearDown(),然后调用os.Exit(code),后者调用tearDown之后os.Exit(即从不)。您需要在os.Exit 之前显式调用tearDown,或者创建一个新函数来推迟调用os.Exit

【讨论】:

  • 这是正确答案 - os.Exit 不会“尊重”延迟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2012-03-02
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多