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.

Tags:

Go