Go:
การเขียนการทดสอบ

วิธีการทำ:

ใน Go การทดสอบมักจะเขียนอยู่ในแพกเกจเดียวกับโค้ดที่พวกเขาทดสอบ ไฟล์ที่มีการทดสอบจะตั้งชื่อตามด้วย _test.go การทดสอบเป็นฟังก์ชันที่รับพอยเตอร์ไปยังการทดสอบ.T โอบเจกต์ (จากแพ็กเกจ testing) เป็นอาร์กิวเมนต์ และพวกเขาส่งสัญญาณความล้มเหลวโดยการเรียกเมทอดเช่น t.Fail(), t.Errorf() ฯลฯ

ตัวอย่างการทดสอบง่ายๆ สำหรับฟังก์ชัน Add ที่กำหนดใน math.go:

// math.go
package math

func Add(x, y int) int {
    return x + y
}

ไฟล์ทดสอบ math_test.go:

package math

import "testing"

func TestAdd(t *testing.T) {
    result := Add(1, 2)
    expected := 3
    if result != expected {
        t.Errorf("Add(1, 2) = %d; want %d", result, expected)
    }
}

รันการทดสอบของคุณด้วยคำสั่ง go test ในไดเรกทอรี่เดียวกับไฟล์ทดสอบของคุณ ตัวอย่างการแสดงผลของการทดสอบผ่านจะดูคล้ายกับ:

PASS
ok      example.com/my/math 0.002s

สำหรับการทดสอบที่ขับเคลื่อนด้วยตาราง ซึ่งช่วยให้คุณสามารถทดสอบชุดข้อมูลนำเข้าและผลลัพธ์ที่แตกต่างกันได้อย่างมีประสิทธิภาพ ให้กำหนดสไลซ์ของโครงสร้างที่แทนกรณีการทดสอบ:

func TestAddTableDriven(t *testing.T) {
    var tests = []struct {
        x        int
        y        int
        expected int
    }{
        {1, 2, 3},
        {2, 3, 5},
        {-1, -2, -3},
    }

    for _, tt := range tests {
        testname := fmt.Sprintf("%d+%d", tt.x, tt.y)
        t.Run(testname, func(t *testing.T) {
            ans := Add(tt.x, tt.y)
            if ans != tt.expected {
                t.Errorf("got %d, want %d", ans, tt.expected)
            }
        })
    }
}

ศึกษาเพิ่มเติม

เฟรมเวิร์กการทดสอบของ Go ที่นำเสนอใน Go 1 พร้อมกับภาษาเอง ได้ถูกออกแบบมาเพื่อรวมเข้ากับเครื่องมือชุด Go ได้อย่างไม่มีรอยต่อ สะท้อนถึงการเน้นความเรียบง่ายและประสิทธิภาพในการพัฒนาซอฟต์แวร์ของ Go ไม่เหมือนกับเฟรมเวิร์กการทดสอบในภาษาอื่นๆ ที่พึ่งพาไลบรารีภายนอกหรือการตั้งค่าที่ซับซ้อน แพ็กเกจ testing ที่ในตัวของ Go มีวิธีที่ตรงไปตรงมาในการเขียนและรันการทดสอบ

ด้านที่น่าสนใจของการเข้าถึงการทดสอบของ Go คือหลักการของการใช้ค่าตามมาตรฐานมากกว่าการกำหนดค่าเองที่มันรับเอามา อย่างเช่นรูปแบบการตั้งชื่อไฟล์ (_test.go) และการใช้ฟังก์ชั่นของไลบรารีมาตรฐานมากกว่าความเป็นพึ่งพาของภายนอก แนวทางนี้มีจุดมุ่งหมายเพื่อกระตุ้นให้นักพัฒนาเขียนการทดสอบ เนื่องจากอุปสรรคในการเข้าถึงต่ำ

แม้ว่าสิทธิประโยชน์ในการทดสอบภายในของ Go จะครอบคลุมไปได้มาก แต่ก็มีสถานการณ์ที่เครื่องมือหรือเฟรมเวิร์กของบุคคลที่สามอาจมอบประสิทธิภาพเพิ่มเติม เช่นการสร้างโมคอัพ, การทดสอบการหาข้อผิดพลาดอัตโนมัติ, หรือการทดสอบแบบพัฒนาตามพฤติกรรม (BDD) ไลบรารียอดนิยมเช่น Testify หรือ GoMock เสริมความสามารถการทดสอบมาตรฐานของ Go โดยการนำเสนอการยืนยันที่มีอำนาจเหนือกว่าหรือความสามารถในการสร้างโมคอัพ ซึ่งอาจมีประโยชน์เฉพาะในแอปพลิเคชันที่ซับซ้อนพร้อมความเป็นพึ่งพาหลายอย่าง

ถึงแม้จะมีทางเลือกเหล่านี้ แพ็กเกจการทดสอบมาตรฐานของ Go ยังคงเป็นหัวใจสำคัญสำหรับการทดสอบใน Go เนื่องจากความเรียบง่าย ประสิทธิภาพ และการรวมอย่างแนบแน่นกับภาษาและเครื่องมือชุด ไม่ว่านักพัฒนาจะเลือกเสริมด้วยเครื่องมือของบุคคลที่สามหรือไม่ก็ตาม เฟรมเวิร์กการทดสอบของ Go มีพื้นฐานที่แข็งแกร่งในการรับประกันคุณภาพและความเชื่อถือได้ของโค้ด