Last Updated: February 25, 2016
·
366
· wingyplus

Testing in Go Language

โกมี testing framework ให้ในตัวโดยมีข้อกำหนดคือ

  1. ชื่อไฟล์ที่จะทดสอบในแพคเกจนั้นๆ ต้องลงท้ายด้วย _test.go เช่น sqrt_test.go
  2. ชื่อฟังก์ชั่นต้องขึ้นต้นด้วย Test เช่น func TestSqrt
  3. argument ของฟังก์ชั่นต้องเป็น t *testing.T เช่น func TestSqrt(t *testing.T)

ยกตัวอย่างเช่น ผมต้องการจะเทส squareroot ใน package github.com/wingyplus/math โดยชื่อไฟล์จริงจะตั้งชื่อว่า sqrt.go

ขั้นตอนแรกคือสร้าง sqrt_test.go ใน $GOPATH/github.com/wingyplus/math

ต่อมาคือเริ่มเขียนเทสใน sqrt_test.go

package math

import "testing"

func TestSqrt(t *testing.T) {
    const in, out = 4, 2
    if x := Sqrt(in); x != out {
        t.Errorf("Sqrt(%v) = %v, want %v", in, x, out)
    }
}

จากในตัวอย่างคือเราต้องการทดสอบฟังก์ชั่น Sqrt โดยใส่ค่าในตัวแปร in และต้องการให้ผลลัพธ์ออกมาเท่ากับตัวแปร out สังเกตได้ว่า การตรวจสอบค่าของ testing framework ใน go จะเป็นการใช้ if ตรวจสอบผลลัพธ์และสั่งให้ Error เมื่อการทดสอบไม่ตรงกับที่คาดหมายไว้

ถ้าให้ผมเขียนเทียบกับ java จะได้ประมาณเดียวกับ assertEquals เช่น

public class SqrtTest {
    @Test
    public void testSqrt() {
        Assert.assertEquals(2, Math.sqrt(4));
    }
}

จากนั้นรันเทสด้วยคำสั่ง go test

$ go test github.com/wingyplus/math