目錄
How to Write a Basic Unit Test
Table-Driven Tests: A Cleaner Way to Test Multiple Cases
Running Specific Tests and Getting More Output
首頁 後端開發 Golang GO中的測試是什麼,我該如何編寫單元測試?

GO中的測試是什麼,我該如何編寫單元測試?

Jun 20, 2025 am 08:41 AM
go 單元測試

Go的單元測試通過內置的testing包實現,開發者只需遵循命名規範即可編寫和運行測試。具體步驟包括:1. 創建以_test.go結尾的測試文件;2. 編寫以Test開頭的測試函數;3. 使用t.Errorf()報告錯誤;4. 使用go test命令運行測試;5. 使用表驅動測試多個用例;6. 使用-run標誌運行特定測試,使用-v標誌獲取詳細輸出。例如測試Add函數時,可在math_test.go中編寫TestAdd函數,並通過結構體定義多組輸入輸出進行驗證。此外,可通過go test -run TestAdd運行指定測試,或通過go test -v查看詳細日誌信息。

What is testing in Go, and how do I write unit tests?

Testing in Go is a built-in feature that allows developers to write and run tests directly alongside their code, without needing third-party libraries. Unit testing in Go is straightforward — it uses the testing package and follows a simple naming convention for test functions.

How to Write a Basic Unit Test

To write a unit test in Go, you create a function in a _test.go file. The function name must start with Test , followed by the name of the function or method being tested.

For example, if you have a function called Add in a file named math.go , you'd write its test in a file named math_test.go . Here's how a basic test might look:

 package main

import "testing"

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    expected := 5

    if result != expected {
        t.Errorf("Expected %d, got %d", expected, result)
    }
}
  • Make sure your test files end in _test.go
  • Import the testing package
  • Use t.Errorf() (or similar methods) to report failures

When you're ready to run the test, use the command line:

 go test

If everything passes, you'll see a PASS message. If something fails, Go will show you exactly which test failed and why.

Table-Driven Tests: A Cleaner Way to Test Multiple Cases

Go developers often use table-driven tests to check multiple input-output combinations in a single test function. This keeps tests concise and easy to maintain.

Here's an example using the same Add function:

 func TestAdd(t *testing.T) {
    tests := []struct {
        a, b int
        expect int
    }{
        {2, 3, 5},
        {0, 0, 0},
        {-1, 1, 0},
        {100, 200, 300},
    }

    for _, tt := range tests {
        result := Add(tt.a, tt.b)
        if result != tt.expect {
            t.Errorf("Add(%d, %d): expected %d, got %d", tt.a, tt.b, tt.expect, result)
        }
    }
}

This approach makes it easy to:

  • Add more test cases quickly
  • See what's being tested at a glance
  • Reuse the same assertion logic across all cases

Many Go projects prefer this style because it reduces duplication and improves readability.

Running Specific Tests and Getting More Output

If you have a lot of tests and want to run just one, you can use the -run flag followed by a regular expression matching the test name:

 go test -run TestAdd

To get more detailed output, including logs from t.Log() or fmt.Println() , add the -v flag:

 go test -v

You can also combine flags:

 go test -v -run TestAdd

These options are handy when debugging failing tests or when you're working on a specific part of your codebase.


That's the basics of writing and running tests in Go. It's not complicated, but there are some small rules to remember, like naming conventions and where to place your test files.

以上是GO中的測試是什麼,我該如何編寫單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1604
29
PHP教程
1510
276
登錄的一些最佳實踐是什麼? 登錄的一些最佳實踐是什麼? Aug 04, 2025 pm 04:48 PM

使用結構化日誌記錄、添加上下文、控制日誌級別、避免記錄敏感數據、使用一致的字段名、正確記錄錯誤、考慮性能、集中監控日誌並統一初始化配置,是Go中實現高效日誌的最佳實踐。首先,採用JSON格式的結構化日誌(如使用uber-go/zap或rs/zerolog)便於機器解析和集成ELK、Datadog等工具;其次,通過請求ID、用戶ID等上下文信息增強日誌可追踪性,可通過context.Context或HTTP中間件注入;第三,合理使用Debug、Info、Warn、Error等級別,並通過環境變量動

GO測試命令是用什麼? GO測試命令是用什麼? Aug 03, 2025 pm 02:47 PM

gotestisthestandardcommandforrunningtestsinGo,automaticallyexecutingfunctionsthatmatchthepatternTestXxx(ttesting.T)in_test.gofiles;1.Runalltestswithgotest.;2.Writetestcasesusingt.Errorforsimilarforassertions;3.PerformbenchmarksusingfuncBenchmarkXxx(b

如何優雅地關閉Go服務? 如何優雅地關閉Go服務? Aug 05, 2025 pm 08:21 PM

usesignal.notify()

類型如何在GO中實現接口? 類型如何在GO中實現接口? Aug 03, 2025 pm 03:19 PM

InGo,atypeimplementsaninterfaceimplicitlybyprovidingallrequiredmethodswithoutexplicitdeclaration.1.Interfacesaresatisfiedautomaticallywhenatypehasmethodsmatchingtheinterface'ssignatureexactly.2.No"implements"keywordisneeded—ducktypingisused

如何在GO中解析XML數據 如何在GO中解析XML數據 Aug 05, 2025 pm 07:24 PM

解析XML數據在Go中非常簡單,只需使用內置的encoding/xml包即可。 1.定義帶有xml標籤的結構體來映射XML元素和屬性,如xml:"name"對應子元素,xml:"contact>email"處理嵌套,xml:"id,attr"讀取屬性;2.使用xml.Unmarshal將XML字符串解析為結構體;3.對於文件,使用os.Open打開後通過xml.NewDecoder解碼,適合大文件流式處理;4.處理重複元素時,在結構

高級開玩笑和vitest模式用於有效的單元測試 高級開玩笑和vitest模式用於有效的單元測試 Aug 06, 2025 am 12:23 AM

避免使用partialmocksandspiestotestestractions withoutrePlacingEntireImplementations,oigingonlyExternalDippedencencieslikeapieslikeapis.2.usefaketimers(jest.usefaketimersinjest,vi.usefaketimersinjest,vi.usefaketimersinvitest)

如何在Go中獲得當前時間 如何在Go中獲得當前時間 Aug 06, 2025 am 11:28 AM

usetime.now()togetThecurrentLocalTimeasatime.timeObject; 2. formattheTime usedtheformatMethodWithLayoutSlike“ 2006-01-0215:04:05”; 3.getutctimebybbybbycallingcallingutc {

如何在GO中流數據? 如何在GO中流數據? Aug 03, 2025 am 11:30 AM

使用io.Reader和io.Writer可高效流式處理數據,避免內存溢出;通過io.Copy實現文件、HTTP或網絡數據的分塊傳輸;使用goroutines和channels構建處理流水線,如逐行讀取大日誌文件;利用io.Pipe在goroutine間安全傳輸數據;始終分塊讀寫,避免一次性加載全部數據,確保內存可控。

See all articles