Go 语言单元测试和集成测试教程 - 实践指南
Go 语言提供了一个内置的测试框架,可以进行单元测试和集成测试。
单元测试
单元测试是对代码中最小可测试单元进行测试,例如函数、方法等。单元测试可以通过以下步骤进行:
- 在测试文件中导入 'testing' 包
- 创建测试函数,函数名必须以 'Test' 开头,并接收一个参数 't *testing.T'
- 在测试函数中编写测试逻辑,使用 't' 提供的方法进行断言
- 运行测试命令 'go test',查看测试结果
示例代码:
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(1, 2)
if result != 3 {
t.Errorf("Add(1, 2) = %d; want 3", result)
}
}
func TestSub(t *testing.T) {
result := Sub(4, 2)
if result != 2 {
t.Errorf("Sub(4, 2) = %d; want 2", result)
}
}
集成测试
集成测试是对多个模块或组件进行测试,测试它们之间的交互和协同工作。集成测试可以通过以下步骤进行:
- 在测试文件中导入 'testing' 包和主程序包
- 创建测试函数,函数名必须以 'Test' 开头,并接收一个参数 't *testing.T'
- 在测试函数中编写测试逻辑,调用主程序包中的函数进行测试
- 运行测试命令 'go test',查看测试结果
示例代码:
package main
import (
"testing"
"net/http"
"net/http/httptest"
)
func TestHandleHello(t *testing.T) {
req, err := http.NewRequest("GET", "/hello", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
handler := http.HandlerFunc(HandleHello)
handler.ServeHTTP(rr, req)
if status := rr.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v",
status, http.StatusOK)
}
if rr.Body.String() != "Hello, World!" {
t.Errorf("handler returned unexpected body: got %v want %v",
rr.Body.String(), "Hello, World!")
}
}
以上示例代码中,我们测试了一个简单的 HTTP 服务器,测试其处理 '/hello' 请求时是否返回了正确的响应。
原文地址: https://www.cveoy.top/t/topic/oO12 著作权归作者所有。请勿转载和采集!