You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
proposal: testing: allow TestMain to return int #23404
Currently TestMain is expected to call os.Exit itself, but that means it's
not possible to use defer to do package-wide test cleanup there,
because the defer will never be called.
I propose that TestMain be optionally allowed to return an integer,
in which case os.Exit will be called with its result.
Then we can write:
func TestMain(m *testing.M) int {
defer testhelper.Cleanup()
return m.Run()
}
which is arguably more natural and harder to get wrong than calling os.Exit.
I understand that this is more verbose, but I'm wondering if that offsets adding extra code and documentation to the testing package. I would definitely agree with you if the testing package was designed from the ground up, however. Unless there is a specific reason for os.Exit that we are both missing.
@OneOfOne what is your point? The integer that you can use in an os.Exit call is the same integer that @rogpeppe suggests to have as a return parameter. See my silly workaround above as an example.
Activity
mvdan commentedon Jan 10, 2018
Playing the devil's advocate - if one wants to be sure that
os.Exitcan't interfere with defers, what about something like:I understand that this is more verbose, but I'm wondering if that offsets adding extra code and documentation to the testing package. I would definitely agree with you if the testing package was designed from the ground up, however. Unless there is a specific reason for
os.Exitthat we are both missing.OneOfOne commentedon Jan 10, 2018
@mvdan
os.Exitis required to indicate tests success or failure iirc.mvdan commentedon Jan 10, 2018
@OneOfOne what is your point? The integer that you can use in an os.Exit call is the same integer that @rogpeppe suggests to have as a return parameter. See my silly workaround above as an example.
rsc commentedon Jan 29, 2018
TestMain is already a rare need. It doesn't make much sense to stack another one on top, especially when you can do what @mvdan suggests.