dougu3988 2016-02-21 11:41 采纳率: 100%
浏览 15
已采纳

获取当前正在执行的测试的名称?

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?

  • 写回答

3条回答 默认 最新

  • dongliaojing0554 2016-02-21 21:13
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?