-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.ProposalProposal-Acceptedearly-in-cycleA change that should be done early in the 3 month dev cycle.A change that should be done early in the 3 month dev cycle.
Milestone
Description
What version of Go are you using (go version
)?
$ go version go version go1.11.2 darwin/amd64
Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GOARCH="amd64" GOBIN="" GOCACHE="/Users/rhysd/Library/Caches/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/rhysd/.go" GOPROXY="" GORACE="" GOROOT="/usr/local/Cellar/go/1.11.2/libexec" GOTMPDIR="" GOTOOLDIR="/usr/local/Cellar/go/1.11.2/libexec/pkg/tool/darwin_amd64" GCCGO="gccgo" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/9t/jwm1hlr905g_wlnzrmbnb3cr0000gn/T/go-build385579133=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
Here is a code snip to explain this issue:
package foo
import (
"os"
"testing"
)
type Parsed struct{}
func parseArguments(args []string) (Parsed, error) {
// parse arguments
if len(args) == 0 {
// Show help message
os.Exit(0)
}
// check parsed arguments
return Parsed{}, nil
}
func TestParse(t *testing.T) {
_, err := parseArguments([]string{})
if err != nil {
t.Fatal(err)
}
// test parse result
}
func TestOther(t *testing.T) {
t.Fatal()
}
Please write above code to some Go file and run:
$ go test
$ echo $?
It outputs 0
. So it means that test is ok. However, actually test has stopped at the middle of execution since os.Exit(0)
is accidentally called.
I'm not sure that this is a bug. It may be intended behavior. But when calling os.Exit(0)
in tests accidentally (for example, due to lack of understanding of API), I may not notice the tests are wrongly run since it exits successfully. CI also cannot detect it.
What did you expect to see?
IMO, go test
exiting with non-zero exit status when the tests exit at the middle of execution by os.Exit()
would solve this issue.
What did you see instead?
echo $?
echoes 0
and test exited successfully
eightnoteight, mcandre, cristaloleg, nordicdyno, coilysiren and 3 more
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.ProposalProposal-Acceptedearly-in-cycleA change that should be done early in the 3 month dev cycle.A change that should be done early in the 3 month dev cycle.