2011-12-03 8 views
12

W JUnit 3 mogłaby uzyskać nazwę aktualnie uruchomionego testu tak:Jak uzyskać nazwę aktualnie uruchomionego testu w spocku?

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

Jak mogę to zrobić w Spocka? Chciałbym użyć nazwy testu jako klucza we współużytkowanym zasobie, aby testy wzajemnie się nie ingerowały.

Odpowiedz

18

Jednym z rozwiązań jest wykorzystanie JUnit za TestName zasadę:

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" 
    } 
} 

Wymaga JUnit 4.7 lub wyższa.

+1

prostu zastanawiam .. co jest w przypadku używania tego? –

+0

dziękuje, że zadziałało dla mnie tam, gdzie mamy specjalne wymagania: – Pushkar

+0

czy jest jakiś sposób, aby uzyskać nazwę z konfiguracji skryptu 'def setup' i po' def cleanup'? – will

3

Spocka 1,0-Groovy-2.4 można spróbować:

def "Simple test"() { 

    expect: 
    specificationContext.currentIteration.name == "Simple test" 
} 
+0

Nice działa z tym samym '1.0-groovy-2.4'. – prayagupd