diskusi.tech (beta) Community

loading...
Lentera Community

Golang Test Coverage

upi profile image Moch Lutfi Originally published at lumochift.org ・2 min read

Tulisan ini merupakan lanjutan dari tulisan sebelumnya tentang unit test, kali ini fokus membahas test coverage yang berfungsi untuk mengetahui apakah unit test sudah memenuhi semua jalur logika dari sistem yang kita uji. Contoh sederhana sebagai berikut:

  1. Suatu fungsi untuk menentukan nilai maksimal dari dua integer input.

  2. Input didefinisikan dalam variabel a dan b.

  3. Jika a lebih besar atau sama dengan b maka return a, sebaliknya jika b lebih besar maka return b.

Sample code sebagai berikut:

package main

func Max(a, b int) int {
    if a >= b {
        return a
    }

    return b
}
Enter fullscreen mode Exit fullscreen mode

Kemudian unit test sebagai berikut:

package main

import "testing"

func TestMax(t *testing.T) {
    if Max(1, 3) != 3 {
        t.Error("error, seharusnya 3")
    }

    // Jika pengecekan dibawah ini dihilangkan maka test coverage jadi 66.67%
    if Max(4, 3) != 4 {
        t.Error("error, seharusnya 4")
    }
}
Enter fullscreen mode Exit fullscreen mode

Jika test coverage dijalankan menggunakan perintah go test --cover di cli maka hasilnya sebagai berikut:

$ go test --cover
PASS
coverage: 100.0% of statements
ok      github.com/h4ckm03d/blog-codes/test-coverage    0.002s
Enter fullscreen mode Exit fullscreen mode

Coba kita review unit testing diatas.

  1. Fungsi Max mempunya 2 cabang logika dan terdiri dari 3 statement if a >= b, return a, dan return b.

  2. Max(1, 3) ini menghasilkan nilai 3, jika dirunut dari fungsi Max akan melewati 2 statement if a >= b dan karena kondisi tidak terpenuh maka langsung ke return b. Jadi hanya tercover 2 statement sehingga test coverage jika pengecekan Max(4,3) dihilangkan maka hasilnya 66.67%.

  3. Karena pemanggilan fungsi Max(4,3) menghasilkan jalur yang berbeda dengan proses pada no.2 yaitu if a >= b dan return 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.

Discussion

pic
Editor guide