2012-05-10 50 views
5

Tôi đã viết một RunListener đơn giản cho JUnit hoạt động khá tốt với Maven. Tôi có thể đăng ký nó cho plugin maven-failsafe quaLàm cách nào để sử dụng JUnit RunListener trong Eclipse?

<properties> 
    <property> 
     <name>listener</name> 
     <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value> 
    </property> 
</properties> 

và xem kết quả chính xác từ người nghe.

Bây giờ tôi muốn đăng ký cùng một RunListener trong Eclipse để xem cùng một đầu ra ở đó, khi tôi chạy thử nghiệm.

Điều này có khả thi không? Đối với mục đích thử nghiệm và để phù hợp nó sẽ được tốt đẹp để có cùng một đầu ra.

Trả lời

1

Có, điều đó là có thể. Về cơ bản bạn phải thực hiện Runner của riêng bạn và bên trong phương thức chạy, bạn có thể thêm một trình lắng nghe chạy tùy chỉnh. Tôi đã tìm ra này dựa trên this post, điểm 2.

Đây là người biết lắng nghe tôi

public class TestLogger extends RunListener 
{ 
    public void testFinished(Description description) 
    { 
     System.out.println("Successful " + description.getMethodName()); 
    } 
} 

và đây là Runner tôi

public class TestRunner extends BlockJUnit4ClassRunner 
{ 
    public TestRunner(Class<?> klass) throws InitializationError 
    { 
     super(klass); 
    } 

    @Override 
    public void run(RunNotifier notifier) 
    { 
     notifier.addListener(new TestLogger()); // THIS IS THE IMPORTANT LINE 
     super.run(notifier); 
    } 
} 

và đây là thử nghiệm thực tế của tôi junit

@RunWith(TestRunner.class)   // THIS LINE IS ALSO IMPORTANT 
public class MyTest1 
{ 
    @Test 
    public void Test1() throws Exception 
    { 
     if (Math.random() < .5) throw new Exception("ouch"); 
     assertFalse(Math.random() < .5); 
    } 
}  

Bạn có thể chạy MyTest1 hoặc phương pháp Test1 bằng cách sử dụng trình đơn ngữ cảnh trong Eclipse và nó sẽ gọi ra testLogger như bạn mong đợi.

+1

Đây không phải là chính xác những gì tôi tìm kiếm, bởi vì tôi không muốn tăng độ phức tạp của việc thực hiện thử nghiệm để ghi nhật ký. Tôi muốn thêm việc ghi nhật ký bên ngoài các thử nghiệm, nhưng giải pháp là tốt nhất cho đến nay và kết quả ở cuối là như mong muốn. Tôi đánh dấu câu trả lời này là giải pháp. –

0

Tôi đã thực hiện thêm một số thay đổi về điều này. Theo như tôi có thể thấy bây giờ, không có cách nào để thêm một người nghe chạy quá JUnit chạy trong Eclipse.

+1

Tôi vô cùng thất vọng về điều này. –

2

Tôi có một bộ kiểm tra cần một cơ sở dữ liệu để thực thi. Tôi muốn tạo cơ sở dữ liệu khi bắt đầu thực hiện và xóa nó ở cuối.

Từ maven tôi cũng đã thêm RunListener vào plugin maven-surefire và hoạt động tốt. Và tôi cũng đã thêm biến thuộc tính hệ thống có tên là ismaven. Khi tôi thực hiện kiểm tra từ maven biến này được khởi tạo nhưng khi tôi thực thi các kiểm tra từ Eclipse, biến này là null (tôi truy cập biến với System.getProperty).

<configuration> 
    <properties> 
    <property> 
     <name>listener</name> 
     <value>com.mycompany.MyRunListener</value> 
    </property> 
    </properties> 
    <systemPropertyVariables> 
    <ismaven>true</ismaven> 
    </systemPropertyVariables> 
</configuration> 

Tất cả thử nghiệm cơ sở dữ liệu của tôi kế thừa từ lớp có phương thức @BeforeClass và @AfterClass. Các phương thức này kiểm tra xem thử nghiệm đang được thực thi bởi Maven hay bởi Eclipse kiểm tra giá trị của thuộc tính ismaven. Nếu thử nghiệm đang được thực thi bởi maven, thuộc tính ismaven có giá trị và chúng hoạt động. Nhưng là thử nghiệm đã được thực hiện bởi Eclipse, biến ismaven là null và họ bắt đầu (@BeforeClass) hoặc dừng (@AfterClass) cơ sở dữ liệu:

@BeforeClass 
public static void checkIfStartDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, start the database 
    if (ismaven == null) { 
    startDatabase(); 
    } 
} 

@AfterClass 
public static void checkIfStopDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, stop the database 
    if (ismaven == null) { 
    stopDatabase(); 
    } 
} 

Giải pháp này không giải quyết được 100% của bạn nhưng nếu bạn thực hiện nó, bạn có thể thực hiện (và gỡ rối) tất cả các bài kiểm tra của một lớp JUnit bằng Eclipse và bạn cũng có thể thực hiện tất cả các bài kiểm tra của dự án của bạn bằng Maven. sau khi thực hiện tất cả các bài kiểm tra của bạn.

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