MST
星途 面试题库

面试题:Go语言接口测试中的断言方法

在Go语言的接口测试实践中,常用的断言库有哪些?请举例说明如何使用其中一个库对接口返回值进行断言,例如判断返回的HTTP状态码为200,以及返回的JSON数据中某个字段的值符合预期。
15.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

常用断言库

  1. testing 包自带断言:Go 语言标准库 testing 包提供了基本的断言函数,如 t.Errorft.Fatalf 等用于测试失败时输出错误信息。
  2. assert:例如 github.com/stretchr/testify/assert 库,功能丰富,支持多种断言方式。
  3. 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)
}

在上述代码中:

  1. 使用 assert.NoError(t, err) 确保 HTTP 请求没有发生错误。
  2. 使用 assert.Equal(t, http.StatusOK, resp.StatusCode) 判断 HTTP 状态码为 200
  3. 读取响应体后,假设已经将 JSON 数据解析到 data 结构体变量,使用 assert.Equal(t, "expectedValue", data.Field) 判断 JSON 数据中 field 字段的值为 expectedValue