2012-10-06 28 views
18

Tôi đang cố gắng để có được phạm vi mã của tôi trong java, bằng cách sử dụng Eclipse và EclEmma.Phạm vi mã trong Java với EclEmma không quét các phương thức ngoại lệ mong đợi

xét nghiệm của tôi đang sử dụng JUnit 4 và tôi đã có một số xét nghiệm tìm kiếm như thế này:

@Test(expected = IllegalArgumentException.class) 
    public void createTime_withInvalidMinuteUnder0_throws(){ 
    //Arrange 
    ... 
    //Act 
    Something triggering IllegalArgumentException Here  
} 

Và EclEmma nói rằng các thử nghiệm không thành công vì có một IllegalArgumentException bị ném. Vì vậy, nó giảm chỉ số bảo hiểm mã của tôi mặc dù nó phải ném một cái gì đó. Có một tùy chọn để làm cho nó thấy rằng thẻ ngoại lệ dự kiến ​​JUnit?

chỉnh sửa: Tôi đã phát hiện ra rằng nếu bạn thêm cú ném vào bản khai của bài kiểm tra, thì nó hoạt động!

Trả lời

21

Không, không có cách nào để nhận được EclEmma để thông báo mệnh đề expected. Họ thừa nhận thực tế này here.

Tại sao các trường hợp kiểm tra JUnit4 có ngoại lệ dự kiến ​​được hiển thị là không được đề cập?

Các trường hợp kiểm tra JUnit4 có ngoại lệ dự kiến ​​được hiển thị là không được bao gồm ngay cả khi chúng được thực thi. Lý do cho điều này là thư viện bảo hiểm mã cơ bản của JaCoCo chỉ xem xét mã được thực thi khi một số đầu dò nhất định được thực thi. Đối với các trường hợp thử nghiệm thành công được đánh dấu bằng @Test{expected=...} thì không phải như vậy.

Cá nhân, tôi sẽ không lo lắng quá nhiều về điều đó. Bảo hiểm của các trường hợp thử nghiệm là điều thú vị nhất mà EclEmma có thể cho bạn biết; Tôi luôn hoàn toàn bỏ qua các số liệu đó và tập trung vào phạm vi mã sản xuất của mình.

+4

Điều thú vị hơn mà EclEmma có thể cho tôi biết là gì? – Pacane

+1

Tôi đã đề cập đến các chỉ số bao phủ mã cho mã sản xuất của bạn, thay vì mã kiểm tra của bạn. Hay tôi đã hiểu nhầm câu hỏi ban đầu của bạn? –

+0

Ồ, tệ của tôi, tôi đã hiểu lầm câu nói của bạn trong câu trả lời của bạn. – Pacane

0

Tôi gặp phải vấn đề tương tự và đưa ra yêu cầu kéo đối phó với nguyên nhân nổi bật nhất của sự khó chịu này. Thay vì thêm quá nhiều thăm dò, tôi chỉ xử lý các opcodes của các lời gọi phương thức. Nói cách khác, vấn đề (trước đó) kết quả bảo hiểm sai gây ra bởi một ngoại lệ được ném bởi một lời gọi phương thức được giải quyết, nhưng không phải nếu ngoại lệ được ném bởi, ví dụ, một phân chia bằng 0, một dàn diễn viên sai hoặc chỉ mục mảng vấn đề.

https://github.com/jacoco/jacoco/pull/261

Hãy thoải mái bình luận về yêu cầu kéo hoặc tham gia vào các cuộc thảo luận, tôi bắt đầu trên mailing list JaCoCo.

4

Không thể nhận xét, nhưng tôi muốn chỉ ra, liên quan đến câu trả lời được chấp nhận, có một lý do rất tốt để chú ý đến phạm vi phủ sóng của mã thử nghiệm của bạn.

Chỉ là cách dễ dàng với JUnit để sửa lỗi quy ước đặt tên phương thức thử hoặc quên chú thích @Test, tùy thuộc vào phiên bản JUnit của bạn. Làm điều đó, và bạn có thể dễ dàng bị lừa khi nghĩ rằng thanh màu xanh lá cây chắc chắn của bạn có nghĩa là bài kiểm tra tốt đẹp mà bạn vừa thêm vào, trong khi thực tế nó không bao giờ chạy. Màu phủ sóng sẽ hiển thị điều này rất nổi bật. Ngoại trừ tất nhiên, như chủ đề này chỉ ra, một số xét nghiệm của bạn mà ném ngoại lệ có thể trông giống như họ đã không chạy khi họ đã làm.