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 มีพื้นฐานที่แข็งแกร่งในการรับประกันคุณภาพและความเชื่อถือได้ของโค้ด