2011-12-03 33 views
12

Trong JUnit 3, tôi có thể có được tên của thử nghiệm hiện đang chạy như thế này:Làm thế nào để có được tên của bài kiểm tra hiện đang chạy trong spock?

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

Làm thế nào để làm điều này trong Spock? Tôi muốn sử dụng tên thử nghiệm làm khóa trong tài nguyên được chia sẻ để các kiểm tra không can thiệp vào nhau.

Trả lời

18

Một giải pháp là để tận dụng quy tắc TestName JUnit của:

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

Điều này đòi hỏi JUnit 4.7 hoặc cao hơn.

+1

Chỉ cần tự hỏi .. các trường hợp sử dụng đó là những gì? –

+0

cảm ơn nó đã làm việc cho tôi, nơi chúng tôi có yêu cầu đặc biệt – Pushkar

+0

là có một số cách để có được tên từ kịch bản thiết lập 'def setup' và sau khi' def cleanup'? – will

3

Đối với Spock 1.0-groovy-2.4 bạn có thể thử:

def "Simple test"() { 

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

Làm việc tốt với cùng '1.0-groovy-2.4'. – prayagupd

Các vấn đề liên quan