- Published on
Golang Test Coverage
- Authors
- Name
- Moch Lutfi
- @kaptenupi
Tulisan ini adalah lanjutan dari Golang Unit Test. Kali ini membahas tentang test coverage, yaitu untuk mengetahui apakah unit test sudah memenuhi semua jalur logika dari sistem yang kita uji. Contoh sederhana sebagai berikut:
Suatu fungsi untuk menentukan nilai maksimal dari dua integer input.
Input didefinisikan dalam variabel
a
danb
.Jika
a
lebih besar atau sama denganb
maka returna
, sebaliknya jikab
lebih besar maka returnb
.
Sample code sebagai berikut:
_9package main_9_9func Max(a, b int) int {_9 if a >= b {_9 return a_9 }_9_9 return b_9}
Kemudian unit test sebagai berikut:
_14package main_14_14import "testing"_14_14func TestMax(t *testing.T) {_14 if Max(1, 3) != 3 {_14 t.Error("error, seharusnya 3")_14 }_14_14 // Jika pengecekan dibawah ini dihilangkan maka test coverage jadi 66.67%_14 if Max(4, 3) != 4 {_14 t.Error("error, seharusnya 4")_14 }_14}
Jika test coverage dijalankan menggunakan perintah go test --cover
di cli maka hasilnya sebagai berikut:
_4$ go test --cover_4PASS_4coverage: 100.0% of statements_4ok github.com/h4ckm03d/blog-codes/test-coverage 0.002s
Coba kita review unit testing diatas.
Fungsi Max mempunya 2 cabang logika dan terdiri dari 3 statement
if a >= b
,return a
, danreturn b
.Max(1, 3)
ini menghasilkan nilai 3, jika dirunut dari fungsi Max akan melewati 2 statementif a >= b
dan karena kondisi tidak terpenuh maka langsung kereturn b
. Jadi hanya tercover 2 statement sehingga test coverage jika pengecekanMax(4,3)
dihilangkan maka hasilnya 66.67%.Karena pemanggilan fungsi
Max(4,3)
menghasilkan jalur yang berbeda dengan proses pada no.2 yaituif a >= b
danreturn a
. Maka semua cabang logika dilewati, karena itulah hasil test coverage keseluruhan jadi 100%.
Semoga yang sedikit ini bisa membantu pemahaman tentang test coverage menggunakan golang. Sampai jumpa lagi di tulisan selanjutnya.