Trong khi tôi đang thử nghiệm một số trường hợp, tôi phát hiện ra rằng bạn có thể không có bảo hiểm trường hợp, khi một ngoại lệ không bắt được ném.
Với ví dụ sau:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.junit.Test;
public class CodeCoverageFinallyTest {
@Test
public void testMyMethod() {
myMethod("2015-08-31");
myMethod("wrongFormat");
}
private void myMethod(final String source) {
try {
new SimpleDateFormat("yyyy-MM-dd").parse(source);
} catch (final ParseException e) {
System.out.println("catch ParseException");
} finally {
System.out.println("finally");
}
}
}
Ví dụ này sẽ chỉ bắt một trong hai chi nhánh tại các khối finally bởi vì bạn không kiểm tra các trường hợp, nếu một ngoại lệ được kiểm soát (ví dụ một NullPointerException) sẽ ném.
Vì vậy, nếu bạn thay đổi testcase của bạn một chút, bạn sẽ bắt tất cả các ngành trong khối cuối cùng:
public void testMyMethod() {
myMethod("2015-08-31");
myMethod("wrongFormat");
myMethod(null); // also cover the case, that an unchecked and unhandled exception
// will be thrown
}
Trong testcase khác của tôi, tôi đã có một trường hợp sligthly khác nhau với một số if-else-if
xây dựng.
import org.junit.Test;
public class CodeCoverageIfElseTest {
@Test
public void testMyMethod() {
myMethod("2015-08-31");
myMethod("wrongFormat");
}
private void myMethod(final String source) {
if ("2015-08-31".equals(source)) {
System.out.println("Correct format");
} else if ("wrongFormat".equals(source)) {
System.out.println("Incorrect format");
}
}
}
Ở đây else if
không bắt chi nhánh thứ hai bởi vì, những gì nếu điều kiện if
vàelse if
sẽ không được đúng không? Nó cũng sẽ bị bắt nếu bạn cung cấp các giá trị khác so với cả hai trong câu lệnh if-else-if
.
"Cũng lưu ý các bắt đặc biệt bổ sung Nó sẽ xuất hiện trong bytecode ngay cả khi bạn viết một cách rõ ràng (Throwable t). " - Tôi tin rằng điều này là sai, tức là 'catch (java/lang/Throwable)' và 'catch (any)' - hai trình xử lý ngoại lệ riêng biệt trong bytecode, ngay cả khi 'Throwable' là một lớp cơ sở của tất cả các lỗi và ngoại lệ. – Godin