Go 语言提供了一个内置的测试框架,可以进行单元测试和集成测试。

单元测试

单元测试是对代码中最小可测试单元进行测试,例如函数、方法等。单元测试可以通过以下步骤进行:

  1. 在测试文件中导入 'testing' 包
  2. 创建测试函数,函数名必须以 'Test' 开头,并接收一个参数 't *testing.T'
  3. 在测试函数中编写测试逻辑,使用 't' 提供的方法进行断言
  4. 运行测试命令 '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)
    }
}
集成测试

集成测试是对多个模块或组件进行测试,测试它们之间的交互和协同工作。集成测试可以通过以下步骤进行:

  1. 在测试文件中导入 'testing' 包和主程序包
  2. 创建测试函数,函数名必须以 'Test' 开头,并接收一个参数 't *testing.T'
  3. 在测试函数中编写测试逻辑,调用主程序包中的函数进行测试
  4. 运行测试命令 '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' 请求时是否返回了正确的响应。

Go 语言单元测试和集成测试教程 - 实践指南

原文地址: https://www.cveoy.top/t/topic/oO12 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录