ดู​ Code Coverage บน .NET Core ด้วย coverlet

หาวิธีเช็ค code coverage บน dotnet core บน non-windows platform จนเจอตัวที่ชื่อ minicover ตามที่ฟิวแนะนำด้วย blog ของปุ๋ย เข้าไปอ่านก็เจอว่าโอเคดีเหมือนกันนะ ตัว minicover แต่ก็ยังไม่ได้ตัดสินใจว่าจะใช้ minicover หรือตัวอื่น เลยหา ๆ ต่อ จนเจออีกตัวที่ชื่อ coverlet ก็โอเคเหมือนกัน ด้วยอยากลองทางเลือกอื่น ๆ บ้าง แถมกับที่ ตัว coverlet มันดูง่ายดี เลยลองเอา coverlet มาใช้ดู

วิธีการติดตั้ง coverlet จะแตกต่างจาก minicover เพราะ coverlet จะมองเป็น package reference ที่ integrate เข้าไปกับ dotnet test เลย ส่วน minicover จะเป็น dotnet core cli tool ที่เรียกผ่าน dotnet minicover

ติดตั้ง coverlet ได้ด้วยคำสั่ง dotnet add package เข้าไปใน test project ตามนี้

dotnet add package coverlet.msbuild

เท่านี้ก็พร้อมใช้งานแล้ว

วิธีใช้งาน

ใช้ option /p:CollectCoverage=true ตอนรัน dotnet test ได้เลย เช่น

dotnet test ./sample-project.tests/sample-project.tests.csproj --no-build /p:CollectCoverage=true

coverlet result

ผลลัพธ์จากคำสั่งจะได้ไฟล์ coverage.json อยู่ใน folder ./sample-project.tests/

ถ้าต้องการเปลี่ยน folder ของไฟล์ output ก็ใช้ option /p:CoverletOutputDirectory=<dir> ระบุว่าจะให้ output ไปลงที่ไหน

coverage output แบบอื่น

coverlet จะสร้างไฟล์ output ออกมาได้หลายแบบ แต่โดย default จะสร้างเป็นแบบ json แต่จริง ๆ แล้วมันสามารถสร้างไฟล์ output ในรูปแบบอื่น ๆ ได้อีก โดยการระบุ option /p:CoverletOutputFormat=<type> โดยที่ type ที่ใช้ได้คือ

  • json
  • lcov
  • opencover
  • cobertura

ตั้ง Threshold ของ Coverage

ถ้าต้องการตั้งว่า ถ้า code coverage ต่ำกว่าเท่าไหร่ให้ fail ก็สามารถทำได้ด้วย option /p:Threshold=<threshold> เช่น /p:Threshold=80 จะแปลว่าเมื่อ code coverage ต่ำกว่า 80 ให้ fail ดังนั้นถ้าเอาไปร้อยใน pipeline ใน continuous integration ก็จะไม่ผ่าน จนกว่าจะแก้ไขให้ code coverage เท่ากับ 80 หรือมากกว่านั้น

อ้างอิง

2 thoughts on “ดู​ Code Coverage บน .NET Core ด้วย coverlet

Leave a Reply