Files
hotime/example/app/expect_demo_test.go
T
hoteas 70012032f0 feat(api): 增强 API 测试框架的断言功能
- 修改 ApiCase 和 ApiResponse 结构,新增 Verify 方法以支持自定义校验函数
- 更新 Get、Post、Put、Delete 方法,允许使用 expect 参数进行更灵活的响应断言
- 添加 ExpectResult 方法,支持对响应结果的结构和类型进行后置校验
- 更新文档,详细说明新功能的使用方法和示例,提升测试框架的可用性
- 增强 Swagger 生成逻辑,支持输出新的 expect 和 verifyError 字段
2026-03-21 13:38:22 +08:00

82 lines
2.9 KiB
Go

package app
import (
"fmt"
. "code.hoteas.com/golang/hotime"
. "code.hoteas.com/golang/hotime/common"
)
var ExpectDemoTest = CtrTest{
"string_result": {Desc: "返回字符串", Func: func(a *Api) {
a.Get("result是字符串", 0, "操作成功")
}},
"number_result": {Desc: "返回整数", Func: func(a *Api) {
a.Get("result是整数", 0, int64(1))
}},
"float_result": {Desc: "返回小数", Func: func(a *Api) {
a.Get("result是小数", 0, float64(1.0))
}},
"bool_result": {Desc: "返回布尔", Func: func(a *Api) {
a.Get("result是布尔", 0, true)
}},
"map_result": {Desc: "返回对象", Func: func(a *Api) {
a.Get("result是Map-校验字段名和类型", 0, Map{
"id": int64(1), "name": "sample", "price": float64(1.0), "in_stock": true,
})
}},
"nested_result": {Desc: "返回嵌套对象", Func: func(a *Api) {
a.Get("深层嵌套Map+Slice+Map", 0, Map{
"id": int64(1), "title": "sample",
"customer": Map{"id": int64(1), "name": "sample", "phone": "sample"},
"items": Slice{Map{
"id": int64(1), "goods_name": "sample", "quantity": int64(1), "price": float64(1.0),
}},
"extra": Map{
"delivery": Map{"address": "sample", "fee": int64(1)},
},
})
}},
"slice_result": {Desc: "返回数组", Func: func(a *Api) {
a.Get("result直接是Slice", 0, Slice{Map{"id": int64(1), "name": "sample"}})
}},
"error_demo": {Desc: "错误+成功混合", Func: func(a *Api) {
a.Form(Map{"name": ""}).Post("名称为空-错误断言", 3, "名称不能为空")
a.Form(Map{"name": "测试"}).Post("名称正确-结构校验", 0, Map{
"id": int64(1), "name": "sample", "created": true,
})
}},
"no_expect": {Desc: "不传预期(仅校验status)", Func: func(a *Api) {
a.Get("只校验status=0", 0)
}},
"verify_demo": {Desc: "Verify数据库校验", Func: func(a *Api) {
a.Form(Map{"name": ""}).Post("名称为空", 3, "名称不能为空")
a.Form(Map{"name": "verify_test"}).
Verify(func(a *Api) error {
row := a.DB().Get("test_batch", "*", Map{"AND": Map{"name": "verify_test", "title": "verify_demo"}})
if row == nil {
return fmt.Errorf("test_batch 表未找到 name=verify_test 的记录")
}
if row.GetCeilInt64("state") != 0 {
return fmt.Errorf("test_batch.state 期望 0, 实际 %d", row.GetCeilInt64("state"))
}
return nil
}).
Post("写入并校验DB-正确", 0, Map{"id": int64(1), "name": "sample"})
a.Form(Map{"name": "verify_fail"}).
Verify(func(a *Api) error {
row := a.DB().Get("test_batch", "*", Map{"AND": Map{"name": "verify_fail", "title": "verify_demo"}})
if row == nil {
return fmt.Errorf("test_batch 表未找到 name=verify_fail 的记录")
}
if row.GetCeilInt64("state") != 99 {
return fmt.Errorf("test_batch.state 期望 99, 实际 %d(接口写入的是0,这里故意校验99来演示失败效果)", row.GetCeilInt64("state"))
}
return nil
}).
Post("写入并校验DB-故意失败", 0, Map{"id": int64(1), "name": "sample"})
}},
}