2010-05-04 38 views
6

Tất cả các thử nghiệm của tôi cho cái nhìn Groovy mã của tôi như thế nàythử nghiệm gói JUnit (trong Eclipse)

public void testButtons() { 
    try { 
     page.getButtons(); 
    } catch (Exception e) { 
     throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);  
    } 
} 

vì tôi cần phải khử trùng bất kỳ StackTrace có thể xuất hiện (nếu không nó rất khó đọc vì nó có tất cả các Groovy meta-code). Có cách nào để xác định rằng tất cả các bài kiểm tra JUnit được bọc theo cách đặc biệt (như một trình xử lý lỗi)?

Lưu ý: Tôi đang chạy chúng trong Eclipse, nhưng nếu có cách để thực hiện việc này trong IntelliJ hoặc Netbeans, điều đó sẽ rất hữu ích.

Trả lời

7

Có, sử dụng Quy tắc. Về cơ bản, bạn phải có một lớp thực hiện giao diện MethodRule xử lý việc xử lý ngoại lệ trong phương thức áp dụng bằng cách thay thế việc thực hiện Tuyên bố của chính nó có try/catch trong nó.

Để sử dụng một quy tắc bạn định nghĩa một lĩnh vực trong lớp thử nghiệm như vậy:

@Rule public MethodRule exceptionCleanser = new ExceptionCleanser(); 

Một thực hiện cắt giảm đầu tiên có lẽ sẽ giống như thế này:

public class ExceptionCleanser implements MethodRule { 

     public Statement apply(final Statement base, FrameworkMethod method, Object target) { 
      return new Statement() { 
       public void evaluate() throws Throwable { 
       try { 
        base.evaluate(); 
       } catch (Exception e) { 
         throw org.codehaus.groovy.runtime.StackTraceUtils.sanitize(e);  
       } 
       } 
      }; 
     } 
    } 

Trên đây là hoàn toàn chưa được kiểm tra, nhưng bạn sẽ có thể có được ý tưởng. Chú thích @Rule được giới thiệu trong JUnit 4.7, vì vậy bạn có thể cần phải cập nhật để sử dụng nó.

+0

Cảm ơn @Yishai. Tôi sẽ kiểm tra lại ở đây khi tôi nhận được mã thực sự. –

+0

Chỉ cần tạo một số ghi chú :) 'println (junit.runner.Version.id()); ' –

+0

Hmmm ... cú pháp có vẻ ổn cả, nhưng phương thức' apply' không bao giờ được chạy. Vẫn đang tìm ra điều này ... –

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