2012-06-08 19 views
5

Tôi vừa viết một số mã mẫu đơn giản để đảm bảo rằng tôi đã cài đặt EclEmma đúng cách. Tôi không được bảo hiểm 100%, và tôi không hiểu tại sao. Điểm nổi bật ngụ ý rằng nó phải làm với tên lớp. Dưới đây là mã của tôi, với các bài kiểm tra JUnit tương ứng, cách EclEmma nhấn mạnh nó:Mã có thể được bao phủ đầy đủ có xếp hạng bảo hiểm EclEmma dưới 100% không?

Arithmetic class

Tests for Arithmetic class

Kết quả bảo hiểm cho thấy ba hướng dẫn trong Arithmetic không nhận được hit, mặc dù cả hai phương pháp thực tế dường như được hoàn toàn bao phủ:

Coverage information

tôi đã đọc the EclEmma documentation about basic block coverage, nhưng tôi vẫn còn bối rối. Tôi không chắc chắn những khối cơ bản nào đang bị bỏ qua. Lúc đầu, tôi nghĩ EclEmma chỉ có thể bỏ qua bytecode cho các lớp học, nhưng ArithmeticTest dường như được xử lý tốt.

Tôi đã hai câu hỏi liên quan chặt chẽ:

  1. Điều này cho thấy một vấn đề với cách tôi cài đặt/cấu hình EclEmma?
  2. Có bình thường/chấp nhận được đối với mã được bao phủ đầy đủ để có xếp hạng bảo hiểm EMMA cao nhưng không hoàn toàn 100% không và nếu có, thì cách này hoạt động như thế nào?

Trả lời

9

Mã của bạn có nghĩa một constructor mặc định, mà không thể được gắn thẻ đúng cách bởi Emma, ​​bởi vì nó không có khối văn bản.

Vì thẻ không được gắn thẻ đúng cách trong khối văn bản, Emma không thể liên kết ghi nhật ký vùng phủ sóng với tệp văn bản và có vẻ như một số mã không được bao gồm; bởi vì, bạn đã chạy một số bytecode, nhưng không thể đăng ký dòng ghi. Sau đó khi phần tử báo cáo đọc ghi nhật ký dòng, họ không thể tìm thấy số dòng cho hàm tạo mặc định và nó làm nổi bật lỗi ở vị trí duy nhất có ý nghĩa, dòng khai báo lớp.

Các constructor mặc định trông giống như

public Arithmetic() { 
    super(); 
} 

Trường hợp siêu là hướng dẫn đầu tiên ngụ ý mà sẽ xây dựng Object. Trong khi bạn có thể bỏ qua sự hiện diện của nó, trình biên dịch sẽ thêm nó vào cho bạn. Đó là nơi bạn nhận được "3 dòng" thay vì một.

+0

Thực ra, nó có một "khối văn bản", nó chỉ trống. Trong bytecode, hàm tạo mặc định là có, tại dòng được đánh dấu bằng màu đỏ bởi EclEmma. Để trang trải nó và nó xuất hiện trong màu xanh lá cây, một bài kiểm tra chỉ cần gọi hàm tạo: 'new Arithmetic()'. Tất nhiên, điều chính xác ở đây sẽ là khai báo một hàm tạo mặc định 'private' trong lớp. –

2

IIRC, bạn cần khởi tạo phiên bản của lớp để thực hiện hàm tạo ngôn ngữ được cung cấp.

4

Tôi nghĩ bạn có sẽ cần phải kiểm tra instantiation của Arithmetic là tốt, hoặc kê khai nhà xây dựng của nó private để không cho phép instantiation

+1

Ah, hãy thử nghiệm hàm tạo. EclEmma không phải là hạnh phúc hơn với một nhà xây dựng tư nhân, nhưng tôi nghĩ rằng tôi nhớ nhìn thấy một cách giải quyết cho điều đó ở đâu đó. – Pops

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