如何在spock中获取当前运行测试的名称?

Noe*_*Yap 15 spock

在JUnit 3中,我可以得到当前运行的测试的名称,如下所示:

public class MyTest extends TestCase {
    public void testSomething() {
        assertThat(getName(), is("testSomething"));
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么在spock中这样做?我想将测试名称用作共享资源中的密钥,以便测试不会相互干扰.

Pet*_*ser 19

一种解决方案是利用JUnit的TestName规则:

import org.junit.Rule
import org.junit.rules.TestName

class MySpec extends Specification {
    @Rule TestName name = new TestName()

    def "some test"() {
        expect: name.methodName == "some test"
    }
}
Run Code Online (Sandbox Code Playgroud)

这需要JUnit 4.7或更高版本.


小智 7

对于spock 1.0-groovy-2.4你可以尝试:

def "Simple test"() {

    expect:
    specificationContext.currentIteration.name == "Simple test"
}
Run Code Online (Sandbox Code Playgroud)