Closed palsivertsen closed 4 months ago
There's a function to test whether given function panics.
func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool
This could be of your interest https://godoc.org/github.com/stretchr/testify/assert#Panics.
Yes, that's one of the functions that will match the PanicAssertionFunc
signature. If you look at the examples for BoolAssertionFunc, ComparisonAssertionFunc, ErrorAssertionFunc and ValueAssertionFunc, I was hoping to do something similar with Panics and NotPanics like so:
package main
import "github.com/stretchr/testify/assert"
import "testing"
// This is the type I suggest adding to testify
type PanicAssertionFunc func(t assert.TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) bool
// This is an example of PanicAssertionFunc usage with table driven tests
func TestSomebodyPanic(t *testing.T) {
tests := map[string]struct {
f func()
assertion PanicAssertionFunc
}{
"panics": {IPanic, assert.Panics},
"no panic": {ImOK, assert.NotPanics},
"fail panic": {IPanic, assert.NotPanics},
"fail no panic": {ImOK, assert.Panics},
}
for name, tt := range tests {
tt := tt
t.Run(name, func(t *testing.T) {
tt.assertion(t, tt.f)
})
}
}
// Helper functions
// IPanic always panics with a nil value
func IPanic() {
panic(nil)
}
// ImOK does nothing
func ImOK() {}
The above test will give the following output:
$ go test
--- FAIL: TestSomebodyPanic (0.00s)
--- FAIL: TestSomebodyPanic/fail_no_panic (0.00s)
main_test.go:23:
Error Trace: main_test.go:23
Error: func (assert.PanicTestFunc)(0x678310) should panic
Panic value: <nil>
Test: TestSomebodyPanic/fail_no_panic
--- FAIL: TestSomebodyPanic/panics (0.00s)
main_test.go:23:
Error Trace: main_test.go:23
Error: func (assert.PanicTestFunc)(0x6782d0) should panic
Panic value: <nil>
Test: TestSomebodyPanic/panics
FAIL
exit status 1
FAIL test 0.003s
Since I find a similar concern, I have added PR https://github.com/stretchr/testify/pull/1337
There's already common function types for the following assertion groups:
assert.BoolAssertionFunc
assert.ComparisonAssertionFunc
assert.ErrorAssertionFunc
assert.ValueAssertionFunc
These are very useful for doing table driven tests, but seems like there's no
PanicAssertionFunc
. It could look like this: