In Go, how would I get the name of the currently executing test, the function name starting with Test
, of the current test without passing it in manually?
As shown above, we can use the getMethodName method of class TestName to display the name of the test.
org.junit If you allocate external resources in a Before method you need to release them after the test runs. Annotating a public void method with @After causes that method to be run after the Test method. All @After methods are guaranteed to run even if a Before or Test method throws an exception.
In JUnit, the execution sequence of the same project is: InitTestCase (setUp) TestCase1 (testMethod1) EndTestCase (tearDown)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With