Testing 为什么测试失败,错误代码为0?

Testing 为什么测试失败,错误代码为0?,testing,go,continuous-integration,tdd,goconvey,Testing,Go,Continuous Integration,Tdd,Goconvey,作为构建的一部分,我需要运行测试 如何确保go test退出时带有错误退出代码(不是0)?您可以将GoTransfer作为正常测试运行,您只需编写一个小测试即可进行测试,该测试将给出可预测的结果,如下图所示 package c import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestConvey(t *testing.T){ Convey("TestConvey", t, f

作为构建的一部分,我需要运行测试
如何确保
go test
退出时带有错误退出代码(不是0)?

您可以将GoTransfer作为正常测试运行,您只需编写一个小测试即可进行测试,该测试将给出可预测的结果,如下图所示

package c

import (
    "testing"
    . "github.com/smartystreets/goconvey/convey"
)

func TestConvey(t *testing.T){
    Convey("TestConvey", t, func() {
        So(false, ShouldBeTrue)
    })
}
这应该是结果 xxx 14:44:03~/GO/src/c/c>GO测试 x 失败:

* /home/xxx/GO/src/c/c/a_test.go 
Line 10:
Expected: true
Actual:   false


1 total assertion

--- FAIL: TestConvey (0.00s)
FAIL
exit status 1
FAIL    c/c     0.006s

您可以作为一个普通的测试运行GoTransfer,您可以非常简单地通过编写一个小测试来测试它,这个小测试会给出一个可预测的结果,就像这样

package c

import (
    "testing"
    . "github.com/smartystreets/goconvey/convey"
)

func TestConvey(t *testing.T){
    Convey("TestConvey", t, func() {
        So(false, ShouldBeTrue)
    })
}
这应该是结果 xxx 14:44:03~/GO/src/c/c>GO测试 x 失败:

* /home/xxx/GO/src/c/c/a_test.go 
Line 10:
Expected: true
Actual:   false


1 total assertion

--- FAIL: TestConvey (0.00s)
FAIL
exit status 1
FAIL    c/c     0.006s
Ok找到了错误:

我在测试之前运行的代码中有TestMain:

func TestMain(m *testing.M) {
    log.SetOutput(ioutil.Discard) // Disable logs.
    m.Run()
}
m.Run
应使用
os.Exit
包装,以便与错误状态代码一起使用:

func TestMain(m *testing.M) {
    log.SetOutput(ioutil.Discard) // Disable logs.
    os.Exit(m.Run())
}
已修复问题

确定找到错误:

我在测试之前运行的代码中有TestMain:

func TestMain(m *testing.M) {
    log.SetOutput(ioutil.Discard) // Disable logs.
    m.Run()
}
m.Run
应使用
os.Exit
包装,以便与错误状态代码一起使用:

func TestMain(m *testing.M) {
    log.SetOutput(ioutil.Discard) // Disable logs.
    os.Exit(m.Run())
}

这解决了问题

GoGo支持Go的本机测试包。既不需要web UI也不需要DSL;您可以单独使用其中一个。@Bert Verhees我运行go测试,看到一个失败的测试,但得到退出代码0…
go测试
应该在测试失败时以代码1退出,并使用该值。对于各种初始化错误,它似乎使用退出代码2。如果您能提供一个演示问题的示例,这将非常有帮助。GoGo支持Go的本机测试包。既不需要web UI也不需要DSL;您可以单独使用其中一个。@Bert Verhees我运行go测试,看到一个失败的测试,但得到退出代码0…
go测试
应该在测试失败时以代码1退出,并使用该值。对于各种初始化错误,它似乎使用退出代码2。如果您能提供一个示例来演示问题,这将非常有帮助。我运行了您的示例,并获得了失败测试的退出代码0否,您没有运行我的示例,您将其包装在其他代码中,然后运行它。这是一个完全不同的故事,它让我和你头疼。不要再这样做了。我运行了您的示例,并获得了失败测试的退出代码0。不,您没有运行我的示例,您将其包装在其他代码中,然后运行它。这是一个完全不同的故事,它让我和你头疼。不要再那样做了。