iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

當我們開發軟體時,要確保程式碼的正確性和穩定性。 Golang 有一個內建的測試框架,稱為 testing,可以輕鬆編寫單元測試和整合測試,以確保程式碼正確運行。今天的文章將簡單探討如何使用Golang的testing套件來撰寫測試,以確保程式碼的品質。

什麼是 Testing ?

Golang 的 testing 套件是Go語言 標準庫 的一部分,提供一個簡單的方式來編寫 單元測試整合測試。不僅易於使用,而且可以與Go的測試工具良好配合,例如 go test 命令,使測試過程更加順暢。

單元測試

單元測試 是針對程式中的 個別函數方法 進行測試的過程,以確保它們按照 預期運行

舉例:

// 要測試的函數,計算兩個整數的和
func Add(a, b int) int {
    return a + b
}

// 單元測試函數
func TestAdd(t *testing.T) {
    result := Add(2, 3)
    if result != 5 {
        t.Errorf("Add(2, 3) = %d; want 5", result)
    }
}

定義一個名為 Add的函數,將兩個整數相加。接著我們使用 Test 開頭的函數名稱來 創建單元測試函數,並在該函數內測試Add函數的行為。如果測試失敗,我們可以使用t.Errorf函數來生成錯誤消息。

執行測試

寫完測試,可以使用 go test命令來運行測試。

go test

go test自動查找_test.go 結尾的文件,並 運行 其中的 測試函數。如果一切正常,你將看到一個 綠色"ok" ,這表示所有 測試通過 了。如果有測試失敗,會顯示相關的錯誤消息。

整合測試

除了單元測試,testing 套件還支援撰寫 整合測試 。整合測試通常用於測試 多個組件模組之間 的互動。
舉例:

// 整合測試函數
func TestIntegration(t *testing.T) {
    t.Run("TestAdd", TestAdd)
    t.Run("TestSubtract", TestSubtract)
    // 添加更多的測試函數...
}

這邊使用 t.Run 函數,運行多個測試函數並將它們組合在一起。這樣的整合測試函數可以更全面測試 不同組件之間的互動。


  • 附上一個完整的程式碼:
// main_test.go

package main

import (
	"testing"
)

// 單元測試函數
func TestAdd(t *testing.T) {
	result := Add(2, 3)
	if result != 5 {
		t.Errorf("Add(2, 3) = %d; want 5", result)
	}
}

func TestSubtract(t *testing.T) {
	result := Subtract(7, 3)
	if result != 4 {
		t.Errorf("Subtract(7, 3) = %d; want 4", result)
	}
}

// 整合測試函數
func TestIntegration(t *testing.T) {
	t.Run("TestAdd", TestAdd)
	t.Run("TestSubtract", TestSubtract)
	// 添加更多的測試函數...
}

創建一個名為 main_test.go 的測試檔案。導入 testing 套件以及我們 要測試的main包

接著定義兩個單元測試函數 TestAddTestSubtract ,分別測試 AddSubtract 函數的行為。如果測試失敗,它們會使用t.Errorf函數生成錯誤消息。

最後創建一個整合測試函數 TestIntegration ,使用 t.Run 函數運行我們的單元測試函數。這樣的整合測試函數可以更全面的測試不同組件之間的互動。

碎語

無論是開發小型項目或大型專案,都建議在開發過程中使用testing來確保程式碼的正確性。有助於減少錯誤,也能提高開發的速度。

10/9 自然醒,悠閒的吃個 brunch 就快馬加鞭的來寫今天的文啦!
時間過好快不知不覺來到第24天了,期許順利完賽。


上一篇
23 | 規則什麼的,自己定義!
下一篇
25 | 真情的自我
系列文
Go 語言學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言