• Alberto Donizetti's avatar
    testing: explain how SkipNow and FailNow stop execution · bd74fd3a
    Alberto Donizetti authored
    SkipNow and FailNow must be called from the goroutine running the
    test. This is already documented, but it's easy to call them by
    mistake when writing subtests. In the following:
    
      func TestPanic(t *testing.T) {
        t.Run("", func(t2 *testing.T) {
    	  t.FailNow()    // BAD: should be t2.FailNow()
    	})
      }
    
    the FailNow call on the outer t *testing.T correctly triggers a panic
    
      panic: test executed panic(nil) or runtime.Goexit
    
    The error message confuses users (see issues #17421, #21175) because
    there is no way to trace back the relevant part of the message ("test
    executed ... runtime.Goexit") to a bad FailNow call without checking
    the testing package source code and finding out that FailNow calls
    runtime.Goexit.
    
    To help users debug the panic message, mention in the SkipNow and
    FailNow documentation that they stop execution by calling
    runtime.Goexit.
    
    Fixes #21175
    
    Change-Id: I0a3e5f768e72b464474380cfffbf2b67396ac1b5
    Reviewed-on: https://go-review.googlesource.com/52770Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    bd74fd3a
Name
Last commit
Last update
..
internal/testdeps Loading commit data...
iotest Loading commit data...
quick Loading commit data...
allocs.go Loading commit data...
allocs_test.go Loading commit data...
benchmark.go Loading commit data...
benchmark_test.go Loading commit data...
cover.go Loading commit data...
example.go Loading commit data...
export_test.go Loading commit data...
helper_test.go Loading commit data...
helperfuncs_test.go Loading commit data...
match.go Loading commit data...
match_test.go Loading commit data...
sub_test.go Loading commit data...
testing.go Loading commit data...
testing_test.go Loading commit data...