2011-07-05 24 views
33

Tôi đã tìm hiểu cách tạo TestSuite trong jUnit 4, nhưng tôi thực sự bỏ lỡ khả năng v3 gói một bộ trong một TestSetup.Thiết lập TestSuite trong jUnit 4

Bất kỳ ý tưởng nào về cách nhận một số thiết lập @ BeforeClass/@ AfterClass được thực hiện cho một bộ các trường hợp kiểm tra trong jUnit 4?

I.e.

@RunWith(Suite.class) 
@Suite.SuiteClasses({Test1.class, Test2.class}) 
public class MyTestSuite { 
    @BeforeClass public static void setUpClass() { 
     // Common initialization done once for Test1 + Test2 
    } 
    @AfterClass public static void tearDownClass() { 
     // Common cleanup for all tests 
    } 
} 

Rất tiếc, đoạn mã trên không hoạt động. @BeforeClass chỉ hoạt động trên cơ sở từng loại thử nghiệm.

+0

Theo câu trả lời này cần làm việc: http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit- 4-x # 177069 – Sebi

Trả lời

50

Đây là những gì tôi có và nó chạy tốt.

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({ TestSuite1.class, TestSuite2.class }) 
public class CompleteTestSuite { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("Master setup"); 

    } 

    @AfterClass public static void tearDownClass() { 
     System.out.println("Master tearDown"); 
    } 

} 

Đây là bộ thử nghiệm 1 của tôi (làm tương tự cho bộ kiểm tra 2).

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(value = Suite.class) 
@SuiteClasses(value = { TestCase1.class }) 
public class TestSuite1 {} 

Và đây là lớp thử nghiệm của tôi. Tạo cả testcase1 và testcase2.

import static org.junit.Assert.assertEquals; 

import org.junit.BeforeClass; 
import org.junit.Test; 

public class TestCase1 { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("TestCase1 setup"); 
    } 

    @Test 
    public void test1() { 
     assertEquals(2 , 2); 
    } 
}  

bạn nên có 5 lớp completesuite suite1 suite2 test1 test2

và chắc chắn rằng bạn có Junit trong xây dựng con đường của bạn. Điều này sẽ chạy!

Đây là kết quả

Master setup 
TestCase1 setup 
Master tearDown 
+0

Cái gì! Nó thực sự hoạt động! Geez, tôi tự hỏi làm thế nào đến tôi không thể làm cho nó hoạt động ngày hôm qua (có lẽ chỉ là một sai lầm trên một phần của tôi sau đó). – Rasmus

+0

Giải pháp tuyệt vời! Ngay cả trong trường hợp của tôi, nơi một máy quét thử nghiệm tùy chỉnh tạo ra danh sách các bài kiểm tra. –

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