2013-01-10 16 views
5

Tôi đang làm việc trên dự án mà tôi cần thực hiện một số hành động trước khi chạy từng thử nghiệm JUnit. Vấn đề này đã được giải quyết bằng cách sử dụng RunListener có thể được thêm vào lõi JUnit. Việc lắp ráp dự án được thực hiện sử dụng Maven, vì vậy tôi có những dòng này trong tập tin pom tôi:Sử dụng JUnit RunListener trong IntelliJ IDEA

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>cc.redberry.core.GlobalRunListener</value> 
        </property> 
       </properties> 
      </configuration> 
     </plugin> 

Vì vậy, mọi thứ hoạt động sử dụng:

mvn clean test 

Nhưng khi kiểm tra được bắt đầu sử dụng IntelliJ (sử dụng thử nghiệm nội bộ của mình Á hậu) các hành động được mã hóa trong số RunListener của chúng tôi không được thực hiện, do đó không thể thực hiện kiểm tra bằng cách sử dụng cơ sở hạ tầng IntelliJ.

Như tôi thấy, IntelliJ không phân tích cú pháp cấu hình này từ tệp pom, vậy có cách nào để nói rõ ràng với IntelliJ để thêm RunListener vào lõi JUnit không? Có thể sử dụng một số tùy chọn VM trong cấu hình?

Sẽ thuận tiện hơn khi sử dụng môi trường thử nghiệm IntelliJ đẹp thay vì đọc đầu ra maven.

P.S. Hành động tôi cần thực hiện về cơ bản là thiết lập lại môi trường tĩnh (một số trường tĩnh trong các lớp của tôi).

Trả lời

3

Tôi không thấy cách nào để chỉ định RunListener trong Intellij, nhưng giải pháp khác là viết Runner khách hàng của riêng bạn và chú thích @RunWith() trong các bài kiểm tra của bạn.

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

    @Override 
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
     // run your code here. example: 
     Runner.value = true;    

     super.runChild(method, notifier); 
    } 
} 

Mẫu tĩnh biến:

public class Runner { 
    public static boolean value = false; 
} 

Sau đó chạy thử nghiệm của bạn như thế này:

@RunWith(MyRunner.class) 
public class MyRunnerTest { 
    @Test 
    public void testRunChild() { 
     Assert.assertTrue(Runner.value); 
    } 
} 

Điều này sẽ cho phép bạn làm khởi tĩnh của bạn mà không có một RunListener.

+0

Cảm ơn bạn đã giải pháp khác! Bây giờ tôi đang nghĩ chỉ để thêm một phụ huynh toàn cục cho tất cả các lớp thử nghiệm của tôi với phương thức '@ Before' được chỉ định. Vì vậy, trong mọi trường hợp, tôi sẽ phải chỉnh sửa tất cả các tệp thử nghiệm của mình. :(Tôi sẽ tạo một vé trong trình theo dõi lỗi IntelliJ để thêm tính năng này. – dbolotin