Code coverage với JaCoCo Maven Plugin

Code coverage là một số liệu dùng để đánh giá bao nhiêu line of code của chúng ta đã được cover bằng Unit Test. Số liệu này rất có ích, giúp chúng ta có thể đánh giá được chất lượng code của chúng ta như thế nào, bao nhiêu code của chúng ta đã được và chưa được cover bởi Unit Test. Trong bài viết này, mình giới thiệu với các bạn một plugin của Apache Maven tên là JaCoCo Maven Plugin giúp chúng ta có thể đo được số liệu code coverage này các bạn nhé.

Mình sẽ tạo mới một Maven project với một ví dụ đơn giản có Unit Test như sau:

JUnit dependency như sau:

Class Calculation:

Class CalculationTest:

JaCoCo Maven Plugin:

OK, bắt đầu nào các bạn!

JaCoCo Maven Plugin định nghĩa rất nhiều goal, nhưng có một goal mà chúng ta cần phải khai báo để plugin này có thể tính toán được số liệu code coverage cho chúng ta, đó là goal: prepare-agent. Giả sử bây giờ mình khai báo goal này trong project example ở trên:

rồi chạy command “mvn test” thì các bạn sẽ thấy kết quả như sau:

Như các bạn thấy ở dòng:

một tập tin tên là jacoco.exec đã được tạo ra trong thư mục target của project. Đây chính là tập tin chứa kết quả report code coverage mà JaCoCo Maven Plugin đã tạo ra. Tập tin này ở dạng binary nên chúng ta không thể xem trực tiếp được nhưng chúng ta vẫn có một cách khác để xem kết quả report này bằng cách sử dụng goal report của JaCoCo Maven Plugin này.

Các bạn hãy chạy project Maven với goal jacoco:report:

để xem kết quả như thế nào nhé!

Lúc này, nếu các bạn kiểm tra thư mục target của project, các bạn sẽ thấy một thư mục tên là site chứa thông tin về code coverage mà JaCoCo Maven Plugin đã tạo ra sau khi chúng ta chạy project với goal report trên:

Code coverage với JaCoCo Maven Plugin

Mở tập tin index.html trong thư mục target/site/jacoco các bạn sẽ thấy kết quả như sau:

Code coverage với JaCoCo Maven Plugin

Đây chính là tất cả các thông tin về code coverage trong project của chúng ta. Các bạn có thể dễ dàng thấy bao nhiêu % code coverage cho từng package trong project của chúng ta phải không?

Các bạn có thể click vào từng package để xem chi tiết:

Code coverage với JaCoCo Maven Plugin

Như các bạn thấy, chúng ta có thể xem chi tiết code coverage đến từng method. Các bạn cũng có thể click vào từng method để xem chúng ta đã coverage những đoạn code nào.

Code coverage với JaCoCo Maven Plugin

Mặc định, những đoạn code nào đã được coverage thì đoạn code đó sẽ được high light bằng màu xanh lá cây, còn ngược lại sẽ là màu đỏ. Ở đây chúng ta còn trường hợp nữa là code Unit Test của chúng ta chưa cover hết tất cả các case có thể xảy ra trong một dòng code nào đó. Lúc này, đoạn code này sẽ được hight light bằng màu vàng.

Ví dụ như, nếu bây giờ mình sửa lại code của CalculationTest, remove:

trong method testSub() thì các bạn sẽ thấy code coverage report cho class Calculation như sau:

Code coverage với JaCoCo Maven Plugin

Kết quả như trên cho thấy, code Unit Test của chúng ta chưa chạy qua dòng code “return b – a” (nên bị high light bằng màu đỏ) và ở dòng code “if (a >= b)”, còn một case nữa mà chúng ta chưa cover (do đó, đoạn code này high light bằng màu vàng).

3 thoughts on “Code coverage với JaCoCo Maven Plugin

Add Comment