Hướng dẫn viết Test đơn giản cho Golang (Bài 2)

viết test golang

🧪 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.T là đối tượng để tương tác với framework test của Go.
  • t.Errorf dù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ấtt *testing.T
  • Phải import "testing" để sử dụng t

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ại
  • t.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.

Chia sẻ nhanh bài viết ↓
Subscribe
Notify of
guest

0 Bình Luận
Newest
Oldest Most Voted
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x