面试题答案
一键面试常用断言库
testing
包自带断言:Go 语言标准库testing
包提供了基本的断言函数,如t.Errorf
、t.Fatalf
等用于测试失败时输出错误信息。assert
库:例如github.com/stretchr/testify/assert
库,功能丰富,支持多种断言方式。require
库:同样来自github.com/stretchr/testify/require
库,它的断言失败时会直接终止测试,而不是像assert
那样继续执行。
使用 assert
库示例
假设使用 net/http
包发起 HTTP 请求并获取响应,示例代码如下:
package main
import (
"io/ioutil"
"net/http"
"testing"
"github.com/stretchr/testify/assert"
)
func TestAPI(t *testing.T) {
resp, err := http.Get("http://example.com/api")
assert.NoError(t, err)
defer resp.Body.Close()
// 判断 HTTP 状态码为 200
assert.Equal(t, http.StatusOK, resp.StatusCode)
body, err := ioutil.ReadAll(resp.Body)
assert.NoError(t, err)
// 假设返回 JSON 数据结构如下
// type ResponseData struct {
// Field string `json:"field"`
// }
// 这里简单假设已经有解析 JSON 数据到 data 变量的过程
var data struct {
Field string `json:"field"`
}
// 假设已经正确解析 JSON 到 data 变量
// 判断 JSON 数据中某个字段的值符合预期
assert.Equal(t, "expectedValue", data.Field)
}
在上述代码中:
- 使用
assert.NoError(t, err)
确保 HTTP 请求没有发生错误。 - 使用
assert.Equal(t, http.StatusOK, resp.StatusCode)
判断 HTTP 状态码为200
。 - 读取响应体后,假设已经将 JSON 数据解析到
data
结构体变量,使用assert.Equal(t, "expectedValue", data.Field)
判断 JSON 数据中field
字段的值为expectedValue
。