Hướng dẫn viết Test đơn giản cho Golang (Bài 2)
🧪 Làm sao để kiểm thử một chương trình?
Khi lập trình, đặc biệt là với Go, bạn nên tách riêng phần “logic nghiệp vụ” (domain logic) ra khỏi những phần có tác động bên ngoài (side-effects) như in ra màn hình, gọi API, ghi file…
Ví dụ: fmt.Println là một side-effect vì nó in ra terminal. Trong khi đó, chuỗi "Hello, world" là phần thuộc logic nghiệp vụ.
Vậy nên, hãy tách hai phần này ra để dễ dàng kiểm thử hơn.
✍️ Viết lại hàm Hello() cho dễ kiểm thử
package main
import "fmt"
func Hello() string {
return "Hello, world"
}
func main() {
fmt.Println(Hello())
}
Ở đây, chúng ta đã viết một hàm Hello() trả về chuỗi "Hello, world". Từ khóa string cho biết hàm này sẽ trả về một chuỗi.
🧪 Tạo file kiểm thử hello_test.go
Bây giờ, ta sẽ tạo một file mới tên là hello_test.go để viết kiểm thử (test) cho hàm Hello():
package main
import "testing"
func TestHello(t *testing.T) {
got := Hello()
want := "Hello, world"
if got != want {
t.Errorf("got %q want %q", got, want)
}
}
📌 Giải thích nhanh:
- Hàm test phải bắt đầu bằng
Test. - Tham số
t *testing.Tlà đối tượng để tương tác với framework test của Go. t.Errorfdùng để thông báo lỗi khi kết quả không khớp.
🏗️ Gặp lỗi khi chạy go test?
Nếu bạn dùng Go 1.16 trở lên, khi chạy:
go test
Bạn có thể gặp lỗi:
go: cannot find main module; see 'go help modules'
🧩 Nguyên nhân: bạn chưa tạo module Go
Cách khắc phục rất đơn giản. Hãy chạy:
go mod init example.com/hello
Lệnh này sẽ tạo file go.mod có nội dung:
module example.com/hello
go 1.16
File go.mod nói cho công cụ Go biết module của bạn là gì, phiên bản Go nào bạn dùng, và sau này sẽ quản lý cả dependency ở đây. Tên module nên chứa dấu chấm (.) — ví dụ như example.com/hello — để đảm bảo tương thích với các công cụ khác.
✅ Quay lại kiểm thử
Sau khi có go.mod, giờ hãy thử chạy lại:
go test
Nếu mọi thứ đúng, bạn sẽ thấy test pass. Thử cố tình làm sai test (ví dụ đổi chuỗi mong đợi want) để xem Go báo lỗi như thế nào.
🧰 Go hỗ trợ test sẵn trong ngôn ngữ
Điều tuyệt vời ở Go là bạn không cần cài đặt bất kỳ framework test nào. Mọi thứ cần thiết để test đã được tích hợp sẵn. Cú pháp cũng giống như viết các hàm thông thường.
🧠 Một số quy tắc khi viết test trong Go:
- Test phải nằm trong file có tên
xxx_test.go - Hàm test phải bắt đầu bằng
Test - Hàm test nhận một tham số duy nhất là
t *testing.T - Phải
import "testing"để sử dụngt
Tham số t giúp bạn điều khiển việc kiểm thử, ví dụ:
t.Fail()– thông báo thất bạit.Errorf()– in lỗi có định dạng và báo thất bại
📚 Những kiến thức bạn đã học trong ví dụ này:
- Câu lệnh if trong Go hoạt động giống hầu hết các ngôn ngữ khác.
- Khai báo biến với cú pháp
tênBiến := giáTrị. - Hàm
t.Errorf()dùng để tạo thông báo lỗi định dạng, ví dụ:
t.Errorf("got %q want %q", got, want)
Trong đó %q sẽ in chuỗi kèm dấu ngoặc kép, giúp dễ đọc và dễ so sánh hơn.
Nếu bạn thấy bài này hữu ích, hãy chia sẻ cho người khác cũng đang bắt đầu học Go nhé! Và nếu bạn cần hướng dẫn cụ thể hơn cho project của mình, mình sẵn sàng hỗ trợ thêm 🙌
🔒 Miễn trừ trách nhiệm: Nội dung trong chuyên mục Crypto chỉ mang tính chất tham khảo, không phải là lời khuyên đầu tư. Thị trường crypto biến động mạnh và tiềm ẩn rủi ro. Người đọc cần tự nghiên cứu (DYOR) và tự chịu trách nhiệm với mọi quyết định của mình. Mình không chịu trách nhiệm cho bất kỳ tổn thất nào phát sinh từ việc sử dụng thông tin trên website.

