Ở Day 1, chúng ta đã xây dựng LibraryService , viết unit test và sử dụng Code Coverage để quan sát những dòng code đã được thực thi. Tuy nhiên, một câu hỏi quan trọng vẫn còn: Nếu một dòng code đã chạy, điều đó có nghĩa là chúng ta đã kiểm tra hết logic của dòng code đó chưa? Trong bài này, chúng ta sẽ tìm hiểu ba khái niệm: Line Coverage: Dòng code có được thực thi không? Branch Coverage: Các nhánh của điều kiện có được thực thi không? Assertions: Test có thực sự kiểm tra kết quả mong đợi không? Chúng ta tiếp tục sử dụng ví dụ tính phí trả sách trễ hạn trong hệ thống quản lý thư viện. 1. Nhắc lại logic của LibraryService Ở Day 1, chúng ta đã xây dựng phương thức CalculateLateFee với quy tắc nghiệp vụ: Trả sách đúng hạn: không tính phí. Trễ hạn: tính 5.000 VNĐ cho mỗi ngày trễ. Số ngày trễ âm: dữ liệu không hợp lệ, cần ném ArgumentException . Mã nguồn của LibraryService.cs như sau: namespace LibraryManagement; public class LibraryService { ...
Chạy tất cả Unit Test và nhận kết quả Passed có đồng nghĩa với việc toàn bộ code đã được kiểm tra? Câu trả lời là không. Hãy tưởng tượng bạn vừa hoàn thành một chức năng mới trong ứng dụng .NET. Bạn chạy toàn bộ Unit Test và nhận được kết quả: Passed: 120 Failed: 0 Mọi test đều thành công. Tuy nhiên, có thể một method mới chưa được bất kỳ test nào gọi đến, hoặc một nhánh xử lý quan trọng chưa bao giờ được thực thi. Nếu không có thêm thông tin, chúng ta khó biết được những phần code nào thực sự đã được kiểm tra. Trong bài viết này, chúng ta sẽ tìm hiểu Code Coverage , tạo Coverage Report cho một project .NET và sử dụng báo cáo để tìm những phần code chưa được test. 1. Code Coverage là gì? Code Coverage là một phép đo cho biết phần code có thể thực thi nào đã được chạy trong quá trình thực hiện test. Ví dụ, một ứng dụng có 100 dòng code có thể thực thi. Trong quá trình chạy test, 70 dòng được thực thi. Line Coverage có thể đạt 70%. Con số này giúp chúng ta nhận biết n...