Get the name of the currently executing testing test?
Just use the Name()
method:
func TestSomethingReallyCool(t *testing.T) {
t.Logf("Test name is %s", t.Name())
}
Here's the docs and here's the code.
This is an interesting question. When you define a test, you pass around a struct that represents the test itself:
func TestSomething(t *testing.T) {
testing.T
is defined as follows:
type T struct {
common
name string // Name of test.
startParallel chan bool // Parallel tests will wait on this.
}
So the struct t
has the name of the test in a field called name
. However, for some reason, the name is not exported and there is no public accessor that will return it. Therefore, you can't access it directly.
There is a workaround. You can use the reflect
package to access the unexported name
and get the test name from t
:
v := reflect.ValueOf(*t)
name := v.FieldByName("name")
// name == "TestSomething"
I'm not sure if this is the best approach, but I was not able to find another reasonable solution to access name
from the testing package.