2014-11-06 19 views
7

Tôi đang thử nghiệm với nhân viên JUnit Enclosed để thử và cải thiện tổ chức một số thử nghiệm của tôi. Tại thời điểm này tôi đang cố gắng tìm ra cách chia sẻ một số thiết lập giữa các lớp bên trong.JUnit Á hậu kèm theo và thiết lập chia sẻ

Nỗ lực đầu tiên:

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 

    public static class FirstTest { 

     @Test 
     public void assertThatSomethingIsTrue() { 
      assertThat(true, is(true)); 
     } 
    } 

    public static class SecondTest { 

     @Test 
     public void assertThatSomethingIsFalse() { 
      assertThat(false, is(false)); 
     } 
    } 
} 

Thật không may, không ai nói chào Meggan. Nếu tôi cập nhật một lớp bên trong để mở rộng một bên ngoài, sau đó tôi nhận được như sau:

java.lang.Exception: class 'org.scratch.EnclosedTest$FirstTest' (possibly indirectly) contains itself as a SuiteClass 
at org.junit.runners.model.InitializationError.<init>(InitializationError.java:32) 

Có một đặc biệt Enclosed thành ngữ để sử dụng khi cố gắng chia sẻ thiết lập giữa các lớp kiểm tra bên trong? Tôi đã hy vọng nó sẽ đơn giản như là C# example I found.

Trả lời

12

Enclosed runner nội bộ hoạt động dưới dạng Suite, tức là, nó chạy các lớp như trường hợp Kiểm tra. Và kể từ Junit 4.12 các lớp bên trong trừu tượng được bỏ qua bởi Á hậu kèm theo.

Điều đó nói rằng con đường để chia sẻ thiết lập là để tạo ra một lớp trừu tượng chứa nó (@Before, @After):

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    abstract public static class SharedSetUp { 
    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 
    } 

    public static class FirstTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsTrue() { 
     assertThat(true, is(true)); 
    } 
    } 

    public static class SecondTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsFalse() { 
     assertThat(false, is(false)); 
    } 
    } 
} 

Chú ý rằng bạn thậm chí có thể tuyên bố vận động viên tùy chỉnh cho mỗi lớp.

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