18

在 JUnit 3 中,我可以像这样获取当前正在运行的测试的名称:

public class MyTest extends TestCase {
    public void testSomething() {
        assertThat(getName(), is("testSomething"));
    }
}

我如何在 spock 中做到这一点?我想将测试名称用作共享资源中的键,以便测试不会相互干扰。

4

2 回答 2

21

一种解决方案是利用 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"
    }
}

这需要 JUnit 4.7 或更高版本。

于 2011-12-03T04:38:44.560 回答
14

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

def "Simple test"() {

    expect:
    specificationContext.currentIteration.name == "Simple test"
}
于 2017-05-11T05:28:12.360 回答