Bạn có thể làm điều này với AspectJ. Bạn khai báo một điểm tham gia (trong trường hợp này yêu cầu phương thức foo) và 'làm mềm' ngoại lệ.
Sửa Để xây dựng một chút về vấn đề này:
Giả sử bạn có các lớp sau Bar
:
public class Bar {
public void foo() throws Exception {
}
}
... và bạn có một bài kiểm tra như thế này:
import junit.framework.TestCase;
public class BarTest extends TestCase {
public void testTestFoo() {
new Bar().foo();
}
}
Sau đó, rõ ràng là thử nghiệm sẽ không biên dịch. Nó sẽ cho một lỗi:
Unhandled exception type Exception BarTest.java(line 6)
Bây giờ để khắc phục điều này với AspectJ, bạn viết một khía cạnh rất đơn giản:
public aspect SoftenExceptionsInTestCode {
pointcut inTestCode() : execution(void *Test.test*());
declare soft : Exception : inTestCode();
}
Khía cạnh cơ bản nói rằng bất kỳ mã từ bên trong một thử nghiệm (ví dụ: một phương pháp bắt đầu bằng "test" trong một lớp kết thúc bằng "Test" và trả về "void") mà ném một ngoại lệ phải được trình biên dịch AspectJ chấp nhận. Nếu một ngoại lệ xảy ra, nó sẽ được gói và ném như là một RuntimeException
bởi trình biên dịch AspectJ. Thật vậy, nếu bạn chạy thử nghiệm này như là một phần của dự án AspectJ từ bên trong Eclipse (với cài đặt AJDT) thì thử nghiệm sẽ thành công, trong khi không có khía cạnh nào thì nó sẽ không biên dịch được.
Nguồn
2009-06-27 10:45:54
IOW một cách để tắt kiểm tra trình biên dịch trên kiểm tra ngoại lệ. –
Có - Tôi nghĩ rằng tôi đã thấy điều này ở đâu đó, ngay cả trong codebase của chúng tôi. – ripper234